From 7e83009a5e049bf44e43bf572813c7700a798c5a Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Sun, 22 Mar 2026 16:33:11 +1100 Subject: [PATCH 1/3] monorepo --- README.md | 6 +- lib/buffer.library.ts | 214 -- lib/proxy.library.ts | 46 - package-lock.json | 267 +- package.json | 86 +- packages/shared/dist/array.library.d.ts | 24 + packages/shared/dist/array.library.js | 77 + packages/shared/dist/array.library.js.map | 1 + packages/shared/dist/buffer.library.d.ts | 6 + packages/shared/dist/buffer.library.js | 193 + packages/shared/dist/buffer.library.js.map | 1 + packages/shared/dist/cipher.class.d.ts | 18 + packages/shared/dist/cipher.class.js | 91 + packages/shared/dist/cipher.class.js.map | 1 + packages/shared/dist/class.library.d.ts | 10 + packages/shared/dist/class.library.js | 71 + packages/shared/dist/class.library.js.map | 1 + packages/shared/dist/coercion.library.d.ts | 14 + packages/shared/dist/coercion.library.js | 72 + packages/shared/dist/coercion.library.js.map | 1 + packages/shared/dist/enumerate.library.d.ts | 62 + packages/shared/dist/enumerate.library.js | 83 + packages/shared/dist/enumerate.library.js.map | 1 + packages/shared/dist/function.library.d.ts | 11 + packages/shared/dist/function.library.js | 54 + packages/shared/dist/function.library.js.map | 1 + packages/shared/dist/index.d.ts | 19 + packages/shared/dist/index.js | 20 + packages/shared/dist/index.js.map | 1 + packages/shared/dist/logify.class.d.ts | 33 + packages/shared/dist/logify.class.js | 70 + packages/shared/dist/logify.class.js.map | 1 + packages/shared/dist/number.library.d.ts | 14 + packages/shared/dist/number.library.js | 35 + packages/shared/dist/number.library.js.map | 1 + packages/shared/dist/object.library.d.ts | 37 + packages/shared/dist/object.library.js | 95 + packages/shared/dist/object.library.js.map | 1 + packages/shared/dist/pledge.class.d.ts | 64 + packages/shared/dist/pledge.class.js | 157 + packages/shared/dist/pledge.class.js.map | 1 + packages/shared/dist/prototype.library.d.ts | 33 + packages/shared/dist/prototype.library.js | 53 + packages/shared/dist/prototype.library.js.map | 1 + packages/shared/dist/proxy.library.d.ts | 2 + packages/shared/dist/proxy.library.js | 40 + packages/shared/dist/proxy.library.js.map | 1 + packages/shared/dist/reflection.library.d.ts | 80 + packages/shared/dist/reflection.library.js | 110 + .../shared/dist/reflection.library.js.map | 1 + packages/shared/dist/serialize.library.d.ts | 25 + packages/shared/dist/serialize.library.js | 267 ++ packages/shared/dist/serialize.library.js.map | 1 + packages/shared/dist/storage.library.d.ts | 8 + packages/shared/dist/storage.library.js | 58 + packages/shared/dist/storage.library.js.map | 1 + packages/shared/dist/string.library.d.ts | 36 + packages/shared/dist/string.library.js | 92 + packages/shared/dist/string.library.js.map | 1 + packages/shared/dist/type.library.d.ts | 334 ++ packages/shared/dist/type.library.js | 81 + packages/shared/dist/type.library.js.map | 1 + packages/shared/dist/utility.library.d.ts | 32 + packages/shared/dist/utility.library.js | 55 + packages/shared/dist/utility.library.js.map | 1 + packages/shared/package.json | 31 + {lib => packages/shared/src}/array.library.ts | 3 - packages/shared/src/buffer.library.ts | 214 ++ {lib => packages/shared/src}/cipher.class.ts | 2 +- {lib => packages/shared/src}/class.library.ts | 0 .../shared/src}/coercion.library.ts | 0 .../shared/src}/enumerate.library.ts | 0 .../shared/src}/function.library.ts | 0 packages/shared/src/index.ts | 19 + {lib => packages/shared/src}/logify.class.ts | 0 .../shared/src}/number.library.ts | 6 +- .../shared/src}/object.library.ts | 0 {lib => packages/shared/src}/pledge.class.ts | 4 +- .../shared/src}/prototype.library.ts | 3 +- packages/shared/src/proxy.library.ts | 46 + .../shared/src}/reflection.library.ts | 0 .../shared/src}/serialize.library.ts | 4 +- .../shared/src}/storage.library.ts | 4 +- .../shared/src}/string.library.ts | 3 - {lib => packages/shared/src}/type.library.ts | 20 +- .../shared/src}/utility.library.ts | 0 packages/shared/tsconfig.json | 12 + packages/shared/tsconfig.tsbuildinfo | 1 + .../tempo/packages/tempo/src/index.d.ts | 5 + .../Project/tempo/packages/tempo/src/index.js | 6 + .../tempo/packages/tempo/src/index.js.map | 1 + .../tempo/packages/tempo/src/tempo.class.d.ts | 666 ++++ .../tempo/packages/tempo/src/tempo.class.js | 1543 ++++++++ .../packages/tempo/src/tempo.class.js.map | 1 + .../tempo.config/plugins/plugin.ticker.d.ts | 17 + .../src/tempo.config/plugins/plugin.ticker.js | 63 + .../tempo.config/plugins/plugin.ticker.js.map | 1 + .../tempo/src/tempo.config/tempo.default.d.ts | 157 + .../tempo/src/tempo.config/tempo.default.js | 166 + .../src/tempo.config/tempo.default.js.map | 1 + .../tempo/src/tempo.config/tempo.enum.d.ts | 111 + .../tempo/src/tempo.config/tempo.enum.js | 81 + .../tempo/src/tempo.config/tempo.enum.js.map | 1 + .../src/tempo.config/terms/term.import.d.ts | 10 + .../src/tempo.config/terms/term.import.js | 18 + .../src/tempo.config/terms/term.import.js.map | 1 + .../src/tempo.config/terms/term.quarter.d.ts | 7 + .../src/tempo.config/terms/term.quarter.js | 29 + .../tempo.config/terms/term.quarter.js.map | 1 + .../src/tempo.config/terms/term.season.d.ts | 7 + .../src/tempo.config/terms/term.season.js | 37 + .../src/tempo.config/terms/term.season.js.map | 1 + .../src/tempo.config/terms/term.timeline.d.ts | 7 + .../src/tempo.config/terms/term.timeline.js | 20 + .../tempo.config/terms/term.timeline.js.map | 1 + .../src/tempo.config/terms/term.utils.d.ts | 17 + .../src/tempo.config/terms/term.utils.js | 39 + .../src/tempo.config/terms/term.utils.js.map | 1 + .../src/tempo.config/terms/term.zodiac.d.ts | 7 + .../src/tempo.config/terms/term.zodiac.js | 63 + .../src/tempo.config/terms/term.zodiac.js.map | 1 + packages/tempo/dist/index.d.ts | 6 + packages/tempo/dist/index.js | 7 + packages/tempo/dist/index.js.map | 1 + packages/tempo/dist/tempo.bundle.esm.js | 3197 ++++++++++++++++ packages/tempo/dist/tempo.bundle.esm.js.map | 1 + packages/tempo/dist/tempo.bundle.js | 3220 +++++++++++++++++ packages/tempo/dist/tempo.bundle.js.map | 1 + packages/tempo/dist/tempo.class.d.ts | 641 ++++ packages/tempo/dist/tempo.class.js | 1542 ++++++++ packages/tempo/dist/tempo.class.js.map | 1 + .../tempo.config/plugins/plugin.ticker.d.ts | 22 + .../tempo.config/plugins/plugin.ticker.js | 60 + .../tempo.config/plugins/plugin.ticker.js.map | 1 + .../dist/tempo.config/tempo.default.d.ts | 157 + .../tempo/dist/tempo.config/tempo.default.js | 166 + .../dist/tempo.config/tempo.default.js.map | 1 + .../tempo/dist/tempo.config/tempo.enum.d.ts | 125 + .../tempo/dist/tempo.config/tempo.enum.js | 81 + .../tempo/dist/tempo.config/tempo.enum.js.map | 1 + .../dist/tempo.config/terms/term.import.d.ts | 10 + .../dist/tempo.config/terms/term.import.js | 18 + .../tempo.config/terms/term.import.js.map | 1 + .../dist/tempo.config/terms/term.quarter.d.ts | 7 + .../dist/tempo.config/terms/term.quarter.js | 29 + .../tempo.config/terms/term.quarter.js.map | 1 + .../dist/tempo.config/terms/term.season.d.ts | 7 + .../dist/tempo.config/terms/term.season.js | 37 + .../tempo.config/terms/term.season.js.map | 1 + .../tempo.config/terms/term.timeline.d.ts | 7 + .../dist/tempo.config/terms/term.timeline.js | 20 + .../tempo.config/terms/term.timeline.js.map | 1 + .../dist/tempo.config/terms/term.utils.d.ts | 17 + .../dist/tempo.config/terms/term.utils.js | 39 + .../dist/tempo.config/terms/term.utils.js.map | 1 + .../dist/tempo.config/terms/term.zodiac.d.ts | 7 + .../dist/tempo.config/terms/term.zodiac.js | 63 + .../tempo.config/terms/term.zodiac.js.map | 1 + packages/tempo/dist/temporal.polyfill.d.ts | 5 + packages/tempo/dist/temporal.polyfill.js | 20 + packages/tempo/dist/temporal.polyfill.js.map | 1 + .../results.json | 1 + packages/tempo/package.json | 47 + packages/tempo/rollup.config.js | 40 + packages/tempo/src/index.ts | 8 + {src => packages/tempo/src}/tempo.class.ts | 68 +- .../src/tempo.config/plugins/plugin.ticker.ts | 87 + .../tempo/src}/tempo.config/tempo.default.ts | 0 .../tempo/src}/tempo.config/tempo.enum.ts | 36 +- .../src}/tempo.config/terms/term.import.ts | 0 .../src}/tempo.config/terms/term.quarter.ts | 0 .../src}/tempo.config/terms/term.season.ts | 0 .../src}/tempo.config/terms/term.timeline.ts | 18 +- .../src}/tempo.config/terms/term.utils.ts | 0 .../src}/tempo.config/terms/term.zodiac.ts | 2 +- .../tempo/src}/temporal.global.d.ts | 2 +- .../tempo/src}/temporal.polyfill.ts | 6 +- .../tempo/test}/accessors.test.ts | 0 {test => packages/tempo/test}/config.test.ts | 0 .../tempo/test}/custom-options.test.ts | 0 {test => packages/tempo/test}/dispose.test.ts | 2 +- .../tempo/test}/duration.test.ts | 0 .../tempo/test}/enumerate.test.ts | 0 {test => packages/tempo/test}/event.test.ts | 0 {test => packages/tempo/test}/format.test.ts | 0 .../tempo/test}/global-options.test.ts | 0 .../tempo/test}/instance.add.test.ts | 0 .../tempo/test}/instance.convert.test.ts | 0 .../tempo/test}/instance.format.test.ts | 0 .../tempo/test}/instance.result.test.ts | 0 .../tempo/test}/instance.set.test.ts | 0 .../tempo/test}/instance.since.test.ts | 0 .../tempo/test}/instance.until.test.ts | 0 .../tempo/test}/issue-fixes.test.ts | 0 .../tempo/test}/meridiem.test.ts | 0 .../tempo/test}/pattern.default.test.ts | 0 .../tempo/test}/pattern.weekday.test.ts | 0 {test => packages/tempo/test}/pledge.test.ts | 2 +- {test => packages/tempo/test}/plugin.test.ts | 0 .../tempo/test}/primitive.test.ts | 0 .../tempo/test}/relative_date.test.ts | 2 +- {test => packages/tempo/test}/repl.ts | 7 +- .../tempo/test}/repro_bracket.test.ts | 0 .../tempo/test}/serialize.test.ts | 0 {test => packages/tempo/test}/setup.ts | 0 .../tempo/test}/static.getters.test.ts | 0 .../tempo/test}/static.methods.test.ts | 0 .../tempo/test}/static.options.test.ts | 0 {test => packages/tempo/test}/static.test.ts | 0 {test => packages/tempo/test}/storage.test.ts | 0 .../tempo/test}/symbol-discovery.test.ts | 0 .../tempo/test}/tempo_from.test.ts | 0 .../tempo/test}/tempo_regexp.test.ts | 2 +- {test => packages/tempo/test}/term.test.ts | 0 {test => packages/tempo/test}/ticker.test.ts | 2 +- {test => packages/tempo/test}/tsconfig.json | 11 +- packages/tempo/tsconfig.json | 24 + packages/tempo/tsconfig.tsbuildinfo | 1 + rollup.config.js | 50 - src/index.ts | 7 - src/tempo.config/plugins/plugin.ticker.ts | 89 - tsconfig.base.json | 105 + tsconfig.json | 118 +- tsconfig.tsbuildinfo | 1 - vitest.config.ts | 3 +- 225 files changed, 16065 insertions(+), 934 deletions(-) delete mode 100644 lib/buffer.library.ts delete mode 100644 lib/proxy.library.ts create mode 100644 packages/shared/dist/array.library.d.ts create mode 100644 packages/shared/dist/array.library.js create mode 100644 packages/shared/dist/array.library.js.map create mode 100644 packages/shared/dist/buffer.library.d.ts create mode 100644 packages/shared/dist/buffer.library.js create mode 100644 packages/shared/dist/buffer.library.js.map create mode 100644 packages/shared/dist/cipher.class.d.ts create mode 100644 packages/shared/dist/cipher.class.js create mode 100644 packages/shared/dist/cipher.class.js.map create mode 100644 packages/shared/dist/class.library.d.ts create mode 100644 packages/shared/dist/class.library.js create mode 100644 packages/shared/dist/class.library.js.map create mode 100644 packages/shared/dist/coercion.library.d.ts create mode 100644 packages/shared/dist/coercion.library.js create mode 100644 packages/shared/dist/coercion.library.js.map create mode 100644 packages/shared/dist/enumerate.library.d.ts create mode 100644 packages/shared/dist/enumerate.library.js create mode 100644 packages/shared/dist/enumerate.library.js.map create mode 100644 packages/shared/dist/function.library.d.ts create mode 100644 packages/shared/dist/function.library.js create mode 100644 packages/shared/dist/function.library.js.map create mode 100644 packages/shared/dist/index.d.ts create mode 100644 packages/shared/dist/index.js create mode 100644 packages/shared/dist/index.js.map create mode 100644 packages/shared/dist/logify.class.d.ts create mode 100644 packages/shared/dist/logify.class.js create mode 100644 packages/shared/dist/logify.class.js.map create mode 100644 packages/shared/dist/number.library.d.ts create mode 100644 packages/shared/dist/number.library.js create mode 100644 packages/shared/dist/number.library.js.map create mode 100644 packages/shared/dist/object.library.d.ts create mode 100644 packages/shared/dist/object.library.js create mode 100644 packages/shared/dist/object.library.js.map create mode 100644 packages/shared/dist/pledge.class.d.ts create mode 100644 packages/shared/dist/pledge.class.js create mode 100644 packages/shared/dist/pledge.class.js.map create mode 100644 packages/shared/dist/prototype.library.d.ts create mode 100644 packages/shared/dist/prototype.library.js create mode 100644 packages/shared/dist/prototype.library.js.map create mode 100644 packages/shared/dist/proxy.library.d.ts create mode 100644 packages/shared/dist/proxy.library.js create mode 100644 packages/shared/dist/proxy.library.js.map create mode 100644 packages/shared/dist/reflection.library.d.ts create mode 100644 packages/shared/dist/reflection.library.js create mode 100644 packages/shared/dist/reflection.library.js.map create mode 100644 packages/shared/dist/serialize.library.d.ts create mode 100644 packages/shared/dist/serialize.library.js create mode 100644 packages/shared/dist/serialize.library.js.map create mode 100644 packages/shared/dist/storage.library.d.ts create mode 100644 packages/shared/dist/storage.library.js create mode 100644 packages/shared/dist/storage.library.js.map create mode 100644 packages/shared/dist/string.library.d.ts create mode 100644 packages/shared/dist/string.library.js create mode 100644 packages/shared/dist/string.library.js.map create mode 100644 packages/shared/dist/type.library.d.ts create mode 100644 packages/shared/dist/type.library.js create mode 100644 packages/shared/dist/type.library.js.map create mode 100644 packages/shared/dist/utility.library.d.ts create mode 100644 packages/shared/dist/utility.library.js create mode 100644 packages/shared/dist/utility.library.js.map create mode 100644 packages/shared/package.json rename {lib => packages/shared/src}/array.library.ts (96%) create mode 100644 packages/shared/src/buffer.library.ts rename {lib => packages/shared/src}/cipher.class.ts (98%) rename {lib => packages/shared/src}/class.library.ts (100%) rename {lib => packages/shared/src}/coercion.library.ts (100%) rename {lib => packages/shared/src}/enumerate.library.ts (100%) rename {lib => packages/shared/src}/function.library.ts (100%) create mode 100644 packages/shared/src/index.ts rename {lib => packages/shared/src}/logify.class.ts (100%) rename {lib => packages/shared/src}/number.library.ts (88%) rename {lib => packages/shared/src}/object.library.ts (100%) rename {lib => packages/shared/src}/pledge.class.ts (97%) rename {lib => packages/shared/src}/prototype.library.ts (97%) create mode 100644 packages/shared/src/proxy.library.ts rename {lib => packages/shared/src}/reflection.library.ts (100%) rename {lib => packages/shared/src}/serialize.library.ts (99%) rename {lib => packages/shared/src}/storage.library.ts (96%) rename {lib => packages/shared/src}/string.library.ts (98%) rename {lib => packages/shared/src}/type.library.ts (94%) rename {lib => packages/shared/src}/utility.library.ts (100%) create mode 100644 packages/shared/tsconfig.json create mode 100644 packages/shared/tsconfig.tsbuildinfo create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.d.ts create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js.map create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.d.ts create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js.map create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.d.ts create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js.map create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.d.ts create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js.map create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.d.ts create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.js create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.js.map create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.import.d.ts create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.import.js create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.import.js.map create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.quarter.d.ts create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.quarter.js create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.quarter.js.map create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.season.d.ts create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.season.js create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.season.js.map create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.timeline.d.ts create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.timeline.js create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.timeline.js.map create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.utils.d.ts create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.utils.js create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.utils.js.map create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.zodiac.d.ts create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.zodiac.js create mode 100644 packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/terms/term.zodiac.js.map create mode 100644 packages/tempo/dist/index.d.ts create mode 100644 packages/tempo/dist/index.js create mode 100644 packages/tempo/dist/index.js.map create mode 100644 packages/tempo/dist/tempo.bundle.esm.js create mode 100644 packages/tempo/dist/tempo.bundle.esm.js.map create mode 100644 packages/tempo/dist/tempo.bundle.js create mode 100644 packages/tempo/dist/tempo.bundle.js.map create mode 100644 packages/tempo/dist/tempo.class.d.ts create mode 100644 packages/tempo/dist/tempo.class.js create mode 100644 packages/tempo/dist/tempo.class.js.map create mode 100644 packages/tempo/dist/tempo.config/plugins/plugin.ticker.d.ts create mode 100644 packages/tempo/dist/tempo.config/plugins/plugin.ticker.js create mode 100644 packages/tempo/dist/tempo.config/plugins/plugin.ticker.js.map create mode 100644 packages/tempo/dist/tempo.config/tempo.default.d.ts create mode 100644 packages/tempo/dist/tempo.config/tempo.default.js create mode 100644 packages/tempo/dist/tempo.config/tempo.default.js.map create mode 100644 packages/tempo/dist/tempo.config/tempo.enum.d.ts create mode 100644 packages/tempo/dist/tempo.config/tempo.enum.js create mode 100644 packages/tempo/dist/tempo.config/tempo.enum.js.map create mode 100644 packages/tempo/dist/tempo.config/terms/term.import.d.ts create mode 100644 packages/tempo/dist/tempo.config/terms/term.import.js create mode 100644 packages/tempo/dist/tempo.config/terms/term.import.js.map create mode 100644 packages/tempo/dist/tempo.config/terms/term.quarter.d.ts create mode 100644 packages/tempo/dist/tempo.config/terms/term.quarter.js create mode 100644 packages/tempo/dist/tempo.config/terms/term.quarter.js.map create mode 100644 packages/tempo/dist/tempo.config/terms/term.season.d.ts create mode 100644 packages/tempo/dist/tempo.config/terms/term.season.js create mode 100644 packages/tempo/dist/tempo.config/terms/term.season.js.map create mode 100644 packages/tempo/dist/tempo.config/terms/term.timeline.d.ts create mode 100644 packages/tempo/dist/tempo.config/terms/term.timeline.js create mode 100644 packages/tempo/dist/tempo.config/terms/term.timeline.js.map create mode 100644 packages/tempo/dist/tempo.config/terms/term.utils.d.ts create mode 100644 packages/tempo/dist/tempo.config/terms/term.utils.js create mode 100644 packages/tempo/dist/tempo.config/terms/term.utils.js.map create mode 100644 packages/tempo/dist/tempo.config/terms/term.zodiac.d.ts create mode 100644 packages/tempo/dist/tempo.config/terms/term.zodiac.js create mode 100644 packages/tempo/dist/tempo.config/terms/term.zodiac.js.map create mode 100644 packages/tempo/dist/temporal.polyfill.d.ts create mode 100644 packages/tempo/dist/temporal.polyfill.js create mode 100644 packages/tempo/dist/temporal.polyfill.js.map create mode 100644 packages/tempo/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json create mode 100644 packages/tempo/package.json create mode 100644 packages/tempo/rollup.config.js create mode 100644 packages/tempo/src/index.ts rename {src => packages/tempo/src}/tempo.class.ts (97%) create mode 100644 packages/tempo/src/tempo.config/plugins/plugin.ticker.ts rename {src => packages/tempo/src}/tempo.config/tempo.default.ts (100%) rename {src => packages/tempo/src}/tempo.config/tempo.enum.ts (83%) rename {src => packages/tempo/src}/tempo.config/terms/term.import.ts (100%) rename {src => packages/tempo/src}/tempo.config/terms/term.quarter.ts (100%) rename {src => packages/tempo/src}/tempo.config/terms/term.season.ts (100%) rename {src => packages/tempo/src}/tempo.config/terms/term.timeline.ts (57%) rename {src => packages/tempo/src}/tempo.config/terms/term.utils.ts (100%) rename {src => packages/tempo/src}/tempo.config/terms/term.zodiac.ts (100%) rename {lib => packages/tempo/src}/temporal.global.d.ts (97%) rename {lib => packages/tempo/src}/temporal.polyfill.ts (85%) rename {test => packages/tempo/test}/accessors.test.ts (100%) rename {test => packages/tempo/test}/config.test.ts (100%) rename {test => packages/tempo/test}/custom-options.test.ts (100%) rename {test => packages/tempo/test}/dispose.test.ts (98%) rename {test => packages/tempo/test}/duration.test.ts (100%) rename {test => packages/tempo/test}/enumerate.test.ts (100%) rename {test => packages/tempo/test}/event.test.ts (100%) rename {test => packages/tempo/test}/format.test.ts (100%) rename {test => packages/tempo/test}/global-options.test.ts (100%) rename {test => packages/tempo/test}/instance.add.test.ts (100%) rename {test => packages/tempo/test}/instance.convert.test.ts (100%) rename {test => packages/tempo/test}/instance.format.test.ts (100%) rename {test => packages/tempo/test}/instance.result.test.ts (100%) rename {test => packages/tempo/test}/instance.set.test.ts (100%) rename {test => packages/tempo/test}/instance.since.test.ts (100%) rename {test => packages/tempo/test}/instance.until.test.ts (100%) rename {test => packages/tempo/test}/issue-fixes.test.ts (100%) rename {test => packages/tempo/test}/meridiem.test.ts (100%) rename {test => packages/tempo/test}/pattern.default.test.ts (100%) rename {test => packages/tempo/test}/pattern.weekday.test.ts (100%) rename {test => packages/tempo/test}/pledge.test.ts (95%) rename {test => packages/tempo/test}/plugin.test.ts (100%) rename {test => packages/tempo/test}/primitive.test.ts (100%) rename {test => packages/tempo/test}/relative_date.test.ts (96%) rename {test => packages/tempo/test}/repl.ts (70%) rename {test => packages/tempo/test}/repro_bracket.test.ts (100%) rename {test => packages/tempo/test}/serialize.test.ts (100%) rename {test => packages/tempo/test}/setup.ts (100%) rename {test => packages/tempo/test}/static.getters.test.ts (100%) rename {test => packages/tempo/test}/static.methods.test.ts (100%) rename {test => packages/tempo/test}/static.options.test.ts (100%) rename {test => packages/tempo/test}/static.test.ts (100%) rename {test => packages/tempo/test}/storage.test.ts (100%) rename {test => packages/tempo/test}/symbol-discovery.test.ts (100%) rename {test => packages/tempo/test}/tempo_from.test.ts (100%) rename {test => packages/tempo/test}/tempo_regexp.test.ts (96%) rename {test => packages/tempo/test}/term.test.ts (100%) rename {test => packages/tempo/test}/ticker.test.ts (97%) rename {test => packages/tempo/test}/tsconfig.json (50%) create mode 100644 packages/tempo/tsconfig.json create mode 100644 packages/tempo/tsconfig.tsbuildinfo delete mode 100644 rollup.config.js delete mode 100644 src/index.ts delete mode 100644 src/tempo.config/plugins/plugin.ticker.ts create mode 100644 tsconfig.base.json delete mode 100644 tsconfig.tsbuildinfo diff --git a/README.md b/README.md index a55176eb..15cdab9c 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,11 @@ npm install @magmacomputing/tempo ``` ### 💻 Node.js (Server-Side) -Tempo is a native ESM package. In Node.js (20+), simply import the class: +Tempo is a native ESM package. In Node.js (20+), simply import the class. +> [!NOTE] +> Tempo uses native Node.js subpath imports (`#core/*`). This requires Node.js 14.6+ or 12.19+ in server-side environments. + +In Node.js: ```javascript import { Tempo } from '@magmacomputing/tempo'; diff --git a/lib/buffer.library.ts b/lib/buffer.library.ts deleted file mode 100644 index 16e19652..00000000 --- a/lib/buffer.library.ts +++ /dev/null @@ -1,214 +0,0 @@ -"use strict"; - -// https://developer.mozilla.org/en-US/docs/Glossary/Base64 - -// Array of bytes to Base64 string decoding -export function b64ToUint6(nChr: number) { - return nChr > 64 && nChr < 91 - ? nChr - 65 - : nChr > 96 && nChr < 123 - ? nChr - 71 - : nChr > 47 && nChr < 58 - ? nChr + 4 - : nChr === 43 - ? 62 - : nChr === 47 - ? 63 - : 0; -} - -export function base64DecToArr(sBase64: string, nBlocksSize?: number) { - const sB64Enc = sBase64.replace(/[^A-Za-z0-9+/]/g, ""); - const nInLen = sB64Enc.length; - const nOutLen = nBlocksSize - ? Math.ceil(((nInLen * 3 + 1) >> 2) / nBlocksSize) * nBlocksSize - : (nInLen * 3 + 1) >> 2; - const taBytes = new Uint8Array(nOutLen); - - let nMod3; - let nMod4; - let nUint24 = 0; - let nOutIdx = 0; - for (let nInIdx = 0; nInIdx < nInLen; nInIdx++) { - nMod4 = nInIdx & 3; - nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (6 * (3 - nMod4)); - if (nMod4 === 3 || nInLen - nInIdx === 1) { - nMod3 = 0; - while (nMod3 < 3 && nOutIdx < nOutLen) { - taBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255; - nMod3++; - nOutIdx++; - } - nUint24 = 0; - } - } - - return taBytes; -} - -/* Base64 string to array encoding */ -export function uint6ToB64(nUint6: number) { - return nUint6 < 26 - ? nUint6 + 65 - : nUint6 < 52 - ? nUint6 + 71 - : nUint6 < 62 - ? nUint6 - 4 - : nUint6 === 62 - ? 43 - : nUint6 === 63 - ? 47 - : 65; -} - -export function base64EncArr(aBytes: Uint8Array) { - let nMod3 = 2; - let sB64Enc = ""; - - const nLen = aBytes.length; - let nUint24 = 0; - for (let nIdx = 0; nIdx < nLen; nIdx++) { - nMod3 = nIdx % 3; - if (nIdx > 0 && ((nIdx * 4) / 3) % 76 === 0) { - sB64Enc += "\r\n"; - } - - nUint24 |= aBytes[nIdx] << ((16 >>> nMod3) & 24); - if (nMod3 === 2 || aBytes.length - nIdx === 1) { - sB64Enc += String.fromCodePoint( - uint6ToB64((nUint24 >>> 18) & 63), - uint6ToB64((nUint24 >>> 12) & 63), - uint6ToB64((nUint24 >>> 6) & 63), - uint6ToB64(nUint24 & 63) - ); - nUint24 = 0; - } - } - return ( - sB64Enc.substring(0, sB64Enc.length - 2 + nMod3) + - (nMod3 === 2 ? "" : nMod3 === 1 ? "=" : "==") - ); -} - -/* UTF-8 array to JS string and vice versa */ - -export function UTF8ArrToStr(aBytes: Uint8Array) { - let sView = ""; - let nPart; - const nLen = aBytes.length; - for (let nIdx = 0; nIdx < nLen; nIdx++) { - nPart = aBytes[nIdx]; - sView += String.fromCodePoint( - nPart > 251 && nPart < 254 && nIdx + 5 < nLen /* six bytes */ - ? /* (nPart - 252 << 30) may be not so safe in ECMAScript! So…: */ - (nPart - 252) * 1073741824 + - ((aBytes[++nIdx] - 128) << 24) + - ((aBytes[++nIdx] - 128) << 18) + - ((aBytes[++nIdx] - 128) << 12) + - ((aBytes[++nIdx] - 128) << 6) + - aBytes[++nIdx] - - 128 - : nPart > 247 && nPart < 252 && nIdx + 4 < nLen /* five bytes */ - ? ((nPart - 248) << 24) + - ((aBytes[++nIdx] - 128) << 18) + - ((aBytes[++nIdx] - 128) << 12) + - ((aBytes[++nIdx] - 128) << 6) + - aBytes[++nIdx] - - 128 - : nPart > 239 && nPart < 248 && nIdx + 3 < nLen /* four bytes */ - ? ((nPart - 240) << 18) + - ((aBytes[++nIdx] - 128) << 12) + - ((aBytes[++nIdx] - 128) << 6) + - aBytes[++nIdx] - - 128 - : nPart > 223 && nPart < 240 && nIdx + 2 < nLen /* three bytes */ - ? ((nPart - 224) << 12) + - ((aBytes[++nIdx] - 128) << 6) + - aBytes[++nIdx] - - 128 - : nPart > 191 && nPart < 224 && nIdx + 1 < nLen /* two bytes */ - ? ((nPart - 192) << 6) + aBytes[++nIdx] - 128 - : /* nPart < 127 ? */ /* one byte */ - nPart - ); - } - return sView; -} - -export function strToUTF8Arr(sDOMStr: string) { - let aBytes; - let nChr: number; - const nStrLen = sDOMStr.length; - let nArrLen = 0; - - /* mapping… */ - for (let nMapIdx = 0; nMapIdx < nStrLen; nMapIdx++) { - nChr = sDOMStr.codePointAt(nMapIdx)!; - - if (nChr > 65536) { - nMapIdx++; - } - - nArrLen += - nChr < 0x80 - ? 1 - : nChr < 0x800 - ? 2 - : nChr < 0x10000 - ? 3 - : nChr < 0x200000 - ? 4 - : nChr < 0x4000000 - ? 5 - : 6; - } - - aBytes = new Uint8Array(nArrLen); - - /* transcription… */ - let nIdx = 0; - let nChrIdx = 0; - while (nIdx < nArrLen) { - nChr = sDOMStr.codePointAt(nChrIdx)!; - if (nChr < 128) { - /* one byte */ - aBytes[nIdx++] = nChr; - } else if (nChr < 0x800) { - /* two bytes */ - aBytes[nIdx++] = 192 + (nChr >>> 6); - aBytes[nIdx++] = 128 + (nChr & 63); - } else if (nChr < 0x10000) { - /* three bytes */ - aBytes[nIdx++] = 224 + (nChr >>> 12); - aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); - aBytes[nIdx++] = 128 + (nChr & 63); - } else if (nChr < 0x200000) { - /* four bytes */ - aBytes[nIdx++] = 240 + (nChr >>> 18); - aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63); - aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); - aBytes[nIdx++] = 128 + (nChr & 63); - nChrIdx++; - } else if (nChr < 0x4000000) { - /* five bytes */ - aBytes[nIdx++] = 248 + (nChr >>> 24); - aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63); - aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63); - aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); - aBytes[nIdx++] = 128 + (nChr & 63); - nChrIdx++; - } /* if (nChr <= 0x7fffffff) */ else { - /* six bytes */ - aBytes[nIdx++] = 252 + (nChr >>> 30); - aBytes[nIdx++] = 128 + ((nChr >>> 24) & 63); - aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63); - aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63); - aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); - aBytes[nIdx++] = 128 + (nChr & 63); - nChrIdx++; - } - nChrIdx++; - } - - return aBytes; -} diff --git a/lib/proxy.library.ts b/lib/proxy.library.ts deleted file mode 100644 index a5eed249..00000000 --- a/lib/proxy.library.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { $Target, allObject } from '#core/shared/reflection.library.js'; -import { secure } from '#core/shared/utility.library.js'; -import { isFunction } from '#core/shared/type.library.js'; - -/** Node.js custom inspection symbol */ -const $Inspect = Symbol.for('nodejs.util.inspect.custom'); - -/** Stealth Proxy pattern to allow for iteration and logging over a Frozen object */ -export function getProxy(target: T) { - secure(target); - const tgt = (target as any)[$Target] ?? target; - let cachedJSON: any; - - return new Proxy(target, { - isExtensible: (t) => Reflect.isExtensible(t), - preventExtensions: (t) => Reflect.preventExtensions(t), - getOwnPropertyDescriptor: (_, key) => Reflect.getOwnPropertyDescriptor(tgt, key), - getPrototypeOf: () => Reflect.getPrototypeOf(tgt), - deleteProperty: (_, key) => Reflect.deleteProperty(tgt, key), - ownKeys: () => Reflect.ownKeys(tgt), - has: (_, key) => Reflect.has(tgt, key), - set: (_, key, val) => Reflect.set(tgt, key, val), - get: (_, key, receiver) => { - if (key === $Target) - return tgt; // found the 'stop' marker - - if (key === $Inspect || key === 'toJSON') { // two special properties require virtual closures - const own = Object.getOwnPropertyDescriptor(tgt, key); - if (own && isFunction(own.value)) // if object already has its own toJSON, return - return own.value; - - if (!cachedJSON) { // otherwise, create a virtual closure - const result = allObject(receiver); // resolve full-object representation - cachedJSON = () => result; // memoize for subsequent calls - } - - return cachedJSON; // return the memoized closure - } - - const val = Reflect.get(tgt, key, receiver); - return (typeof val === 'function') // if the value is a function - ? val.bind(tgt) // bind it to the target - : val; // else return the value - }, - }) as T -} diff --git a/package-lock.json b/package-lock.json index ab6c21cd..57b09266 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,24 +1,22 @@ { - "name": "@magmacomputing/tempo", + "name": "tempo-monorepo", "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@magmacomputing/tempo", - "version": "1.1.0", - "license": "MIT", + "name": "tempo-monorepo", + "workspaces": [ + "packages/*" + ], "dependencies": { "@scarf/scarf": "^1.4.0" }, "devDependencies": { "@js-temporal/polyfill": "^0.5.1", "@release-it/keep-a-changelog": "^7.0.1", - "@rollup/plugin-alias": "^6.0.0", "@rollup/plugin-commonjs": "^29.0.2", "@rollup/plugin-node-resolve": "^16.0.3", - "@rollup/plugin-terser": "^1.0.0", - "@rollup/plugin-typescript": "^12.3.0", "@types/jest": "^30.0.0", "@vitest/ui": "^4.0.18", "release-it": "^19.2.4", @@ -26,7 +24,6 @@ "tsc-alias": "^1.8.16", "tslib": "^2.8.1", "tsx": "^4.21.0", - "vite-tsconfig-paths": "^6.1.1", "vitest": "^4.0.18" } }, @@ -926,38 +923,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -965,17 +930,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@js-temporal/polyfill": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/@js-temporal/polyfill/-/polyfill-0.5.1.tgz", @@ -989,6 +943,14 @@ "node": ">=12" } }, + "node_modules/@magma/shared": { + "resolved": "packages/shared", + "link": true + }, + "node_modules/@magma/tempo": { + "resolved": "packages/tempo", + "link": true + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1320,56 +1282,6 @@ } } }, - "node_modules/@rollup/plugin-terser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-1.0.0.tgz", - "integrity": "sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "serialize-javascript": "^7.0.3", - "smob": "^1.0.0", - "terser": "^5.17.4" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-typescript": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.3.0.tgz", - "integrity": "sha512-7DP0/p7y3t67+NabT9f8oTBFE6gGkto4SA6Np2oudYmZE/m1dt8RB0SjL1msMxFpLo631qjRCcBlAbq1ml/Big==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.1.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.14.0||^3.0.0||^4.0.0", - "tslib": "*", - "typescript": ">=3.7.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - }, - "tslib": { - "optional": true - } - } - }, "node_modules/@rollup/pluginutils": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", @@ -2061,19 +1973,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -2226,13 +2125,6 @@ "node": ">=8" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -3109,12 +3001,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -4609,16 +4495,6 @@ "node": ">=10" } }, - "node_modules/serialize-javascript": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.4.tgz", - "integrity": "sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4698,16 +4574,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/smob": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.1.tgz", - "integrity": "sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/socks": { "version": "2.8.7", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", @@ -4744,6 +4610,7 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", + "optional": true, "engines": { "node": ">=0.10.0" } @@ -4758,17 +4625,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -4888,32 +4744,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/terser": { - "version": "5.46.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", - "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -5003,31 +4833,10 @@ "node": ">=16.20.2" } }, - "node_modules/tsconfck": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.0.3.tgz", - "integrity": "sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==", - "dev": true, - "bin": { - "tsconfck": "bin/tsconfck.js" - }, - "engines": { - "node": "^18 || >=20" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, "license": "0BSD" }, "node_modules/tsx": { @@ -5530,21 +5339,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/undici": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", @@ -5654,21 +5448,6 @@ } } }, - "node_modules/vite-tsconfig-paths": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-6.1.1.tgz", - "integrity": "sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "globrex": "^0.1.2", - "tsconfck": "^3.0.3" - }, - "peerDependencies": { - "vite": "*" - } - }, "node_modules/vitest": { "version": "4.0.18", "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", @@ -5907,6 +5686,24 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "packages/shared": { + "name": "@magma/shared", + "version": "1.1.0", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "packages/tempo": { + "name": "@magma/tempo", + "version": "1.1.0", + "dependencies": { + "@magma/shared": "1.1.0", + "tslib": "^2.8.1" + }, + "devDependencies": { + "@rollup/plugin-alias": "^6.0.0" + } } } } diff --git a/package.json b/package.json index dceb73fd..ae21aab4 100644 --- a/package.json +++ b/package.json @@ -1,93 +1,27 @@ { - "name": "@magmacomputing/tempo", - "version": "1.1.0", - "description": "A premium, high-performance wrapper around the JavaScript Temporal API. A modern, immutable, and fluent alternative to Moment.js, Day.js, and Luxon.", - "main": "dist/src/index.js", - "types": "dist/src/index.d.ts", - "sideEffects": false, - "exports": { - ".": { - "types": "./dist/src/index.d.ts", - "import": "./dist/src/index.js" - }, - "./enums": { - "types": "./dist/src/tempo.config/tempo.enum.d.ts", - "import": "./dist/src/tempo.config/tempo.enum.js" - }, - "./serialize": { - "types": "./dist/lib/serialize.library.d.ts", - "import": "./dist/lib/serialize.library.js" - }, - "./pledge": { - "types": "./dist/lib/pledge.class.d.ts", - "import": "./dist/lib/pledge.class.js" - }, - "./plugins/ticker": { - "types": "./dist/src/tempo.config/plugins/plugin.ticker.d.ts", - "import": "./dist/src/tempo.config/plugins/plugin.ticker.js" - } - }, - "directories": { - "lib": "lib" - }, + "name": "tempo-monorepo", + "private": true, + "description": "Monorepo for Tempo and its shared library component.", + "workspaces": [ + "packages/*" + ], "scripts": { - "test": "vitest run", - "build": "tsc && tsc-alias && npm run build:bundle", - "build:bundle": "rollup -c", + "test": "npm run test --workspaces --if-present", + "build": "tsc -b", + "clean": "tsc -b --clean", "release": "release-it", - "publish": "npm run build && (npm whoami || npm login) && npm publish --access public", - "repl": "tsx -i --import ./test/repl.ts" - }, - "files": [ - "dist" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/magmacomputing/tempo.git" - }, - "keywords": [ - "Temporal", - "Date", - "Time", - "Parsing", - "Formatting", - "Fluent API", - "Moment", - "Momentjs", - "Dayjs", - "Luxon", - "Date-fns", - "Immutable", - "Modern JavaScript", - "Temporal API", - "TC39 Temporal", - "TypeScript", - "ESM", - "Timezone" - ], - "author": "Michael ", - "license": "MIT", - "type": "module", - "bugs": { - "url": "https://github.com/magmacomputing/tempo/issues" + "repl": "npm run repl --workspace=@magma/tempo" }, - "homepage": "https://github.com/magmacomputing/tempo#readme", "devDependencies": { "@js-temporal/polyfill": "^0.5.1", "@release-it/keep-a-changelog": "^7.0.1", - "@rollup/plugin-alias": "^6.0.0", "@rollup/plugin-commonjs": "^29.0.2", "@rollup/plugin-node-resolve": "^16.0.3", - "@rollup/plugin-terser": "^1.0.0", - "@rollup/plugin-typescript": "^12.3.0", - "@types/jest": "^30.0.0", "@vitest/ui": "^4.0.18", "release-it": "^19.2.4", "rollup": "^4.59.0", - "tsc-alias": "^1.8.16", "tslib": "^2.8.1", "tsx": "^4.21.0", - "vite-tsconfig-paths": "^6.1.1", "vitest": "^4.0.18" }, "dependencies": { diff --git a/packages/shared/dist/array.library.d.ts b/packages/shared/dist/array.library.d.ts new file mode 100644 index 00000000..5e552c7e --- /dev/null +++ b/packages/shared/dist/array.library.d.ts @@ -0,0 +1,24 @@ +import type { Property } from '#core/shared/type.library.js'; +/** insert a value into an Array by its sorted position */ +export declare const sortInsert: (arr: T[] | undefined, val: T, key?: K) => T[]; +/** sort Array-of-Objects by multiple keys */ +export interface SortBy { + field: string; + dir?: 'asc' | 'desc'; + index?: number | '*'; + default?: any; +} +/** provide a sort-function to order a set of keys */ +export declare function sortBy>(...keys: (PropertyKey | SortBy)[]): (left: T, right: T) => 0 | 1 | -1; +/** return an array sorted-by a series of keys */ +export declare function sortKey>(array: T[], ...keys: (PropertyKey | SortBy)[]): T[]; +type GroupFn> = (value: T, index?: number) => PropertyKey; +/** group array of objects by the return value of the passed callback. */ +export declare function byKey>(arr: T[], grpFn: GroupFn): Record; +/** group array of objects according to a list of key fields. */ +export declare function byKey>(arr: T[], ...keys: (keyof T)[]): Record; +/** group array of objects by the return value of the passed callback, but only the 'last' entry */ +export declare function byLkp>(arr: T[], grpFn: GroupFn): Record; +/** group array of objects according to a list of key fields, but only the 'last' entry */ +export declare function byLkp>(arr: T[], ...keys: (keyof T)[]): Record; +export {}; diff --git a/packages/shared/dist/array.library.js b/packages/shared/dist/array.library.js new file mode 100644 index 00000000..eba06ac0 --- /dev/null +++ b/packages/shared/dist/array.library.js @@ -0,0 +1,77 @@ +import { asString } from '#core/shared/coercion.library.js'; +import { extract } from '#core/shared/object.library.js'; +import { ownEntries } from '#core/shared/reflection.library.js'; +import { stringify } from '#core/shared/serialize.library.js'; +import { isNumber, isDate, isTempo, isObject, isDefined, isUndefined, isFunction, nullToValue } from '#core/shared/type.library.js'; +// adapted from https://jsbin.com/insert/4/edit?js,output +/** insert a value into an Array by its sorted position */ +export const sortInsert = (arr = [], val, key) => { + const obj = isObject(val) && isDefined(key); // array of Objects + let low = 0, high = arr.length; + while (low < high) { + const mid = (low + high) >>> 1; // divide by 2 + const source = obj + ? arr[mid][key] // array of Object values + : arr[mid]; // assume Primitive values + const target = obj + ? val[key] + : val; + if (source < target) + low = mid + 1; + else + high = mid; + } + arr.splice(low, 0, val); // mutate original Array + return arr; +}; +/** provide a sort-function to order a set of keys */ +export function sortBy(...keys) { + const sortOptions = keys // coerce string => SortBy + .flat() // flatten Array-of-Array + .map(key => isObject(key) ? key : { field: stringify(key) }); // build Array of sort-options + return (left, right) => { + let result = 0; // 0 = same, -1 = leftright + sortOptions.forEach(key => { + if (result === 0) { // no need to look further if result !== 0 + const dir = key.dir === 'desc' ? -1 : 1; + const field = key.field + (key.index ? `[${key.index}]` : ''); + const valueA = extract(left, field, nullToValue(key.default, 0)); + const valueB = extract(right, field, nullToValue(key.default, 0)); + switch (true) { + case isNumber(valueA) && isNumber(valueB): + case isDate(valueA) && isDate(valueB): + case isTempo(valueA) && isTempo(valueB): + result = dir * (valueA - valueB); + break; + default: + result = dir * asString(valueA)?.localeCompare(asString(valueB)); + break; + } + } + }); + return result; + }; +} +/** return an array sorted-by a series of keys */ +export function sortKey(array, ...keys) { + return array.sort(sortBy(...keys)); +} +export function byKey(arr, fnKey, ...keys) { + if (isFunction(fnKey)) + return Object.groupBy(arr, fnKey); + const keyed = [fnKey] // mapFn is a keyof T + .concat(keys) // append any trailing keyof T[] + .flat(); // flatten Array-of-Array + return Object.groupBy(arr, itm => // group an array into an object with named keys + keyed + .map(key => isUndefined(itm[key]) ? '' : stringify(itm[key])) + .join('.')); +} +export function byLkp(arr, fnKey, ...keys) { + const group = isFunction(fnKey) + ? byKey(arr, fnKey) // group by the callback function + : byKey(arr, fnKey, ...keys); // group by the list of keys + return ownEntries(group) + .reduce((acc, [key, grp]) => Object.assign(acc, { [key]: grp?.pop() }), {}); +} +//# sourceMappingURL=array.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/array.library.js.map b/packages/shared/dist/array.library.js.map new file mode 100644 index 00000000..dde77fa5 --- /dev/null +++ b/packages/shared/dist/array.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"array.library.js","sourceRoot":"","sources":["../src/array.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/buffer.library.d.ts b/packages/shared/dist/buffer.library.d.ts new file mode 100644 index 00000000..464fc882 --- /dev/null +++ b/packages/shared/dist/buffer.library.d.ts @@ -0,0 +1,6 @@ +export declare function b64ToUint6(nChr: number): number; +export declare function base64DecToArr(sBase64: string, nBlocksSize?: number): Uint8Array; +export declare function uint6ToB64(nUint6: number): number; +export declare function base64EncArr(aBytes: Uint8Array): string; +export declare function UTF8ArrToStr(aBytes: Uint8Array): string; +export declare function strToUTF8Arr(sDOMStr: string): Uint8Array; diff --git a/packages/shared/dist/buffer.library.js b/packages/shared/dist/buffer.library.js new file mode 100644 index 00000000..88dd46e5 --- /dev/null +++ b/packages/shared/dist/buffer.library.js @@ -0,0 +1,193 @@ +"use strict"; +// https://developer.mozilla.org/en-US/docs/Glossary/Base64 +// Array of bytes to Base64 string decoding +export function b64ToUint6(nChr) { + return nChr > 64 && nChr < 91 + ? nChr - 65 + : nChr > 96 && nChr < 123 + ? nChr - 71 + : nChr > 47 && nChr < 58 + ? nChr + 4 + : nChr === 43 + ? 62 + : nChr === 47 + ? 63 + : 0; +} +export function base64DecToArr(sBase64, nBlocksSize) { + const sB64Enc = sBase64.replace(/[^A-Za-z0-9+/]/g, ""); + const nInLen = sB64Enc.length; + const nOutLen = nBlocksSize + ? Math.ceil(((nInLen * 3 + 1) >> 2) / nBlocksSize) * nBlocksSize + : (nInLen * 3 + 1) >> 2; + const taBytes = new Uint8Array(nOutLen); + let nMod3; + let nMod4; + let nUint24 = 0; + let nOutIdx = 0; + for (let nInIdx = 0; nInIdx < nInLen; nInIdx++) { + nMod4 = nInIdx & 3; + nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (6 * (3 - nMod4)); + if (nMod4 === 3 || nInLen - nInIdx === 1) { + nMod3 = 0; + while (nMod3 < 3 && nOutIdx < nOutLen) { + taBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255; + nMod3++; + nOutIdx++; + } + nUint24 = 0; + } + } + return taBytes; +} +/* Base64 string to array encoding */ +export function uint6ToB64(nUint6) { + return nUint6 < 26 + ? nUint6 + 65 + : nUint6 < 52 + ? nUint6 + 71 + : nUint6 < 62 + ? nUint6 - 4 + : nUint6 === 62 + ? 43 + : nUint6 === 63 + ? 47 + : 65; +} +export function base64EncArr(aBytes) { + let nMod3 = 2; + let sB64Enc = ""; + const nLen = aBytes.length; + let nUint24 = 0; + for (let nIdx = 0; nIdx < nLen; nIdx++) { + nMod3 = nIdx % 3; + if (nIdx > 0 && ((nIdx * 4) / 3) % 76 === 0) { + sB64Enc += "\r\n"; + } + nUint24 |= aBytes[nIdx] << ((16 >>> nMod3) & 24); + if (nMod3 === 2 || aBytes.length - nIdx === 1) { + sB64Enc += String.fromCodePoint(uint6ToB64((nUint24 >>> 18) & 63), uint6ToB64((nUint24 >>> 12) & 63), uint6ToB64((nUint24 >>> 6) & 63), uint6ToB64(nUint24 & 63)); + nUint24 = 0; + } + } + return (sB64Enc.substring(0, sB64Enc.length - 2 + nMod3) + + (nMod3 === 2 ? "" : nMod3 === 1 ? "=" : "==")); +} +/* UTF-8 array to JS string and vice versa */ +export function UTF8ArrToStr(aBytes) { + let sView = ""; + let nPart; + const nLen = aBytes.length; + for (let nIdx = 0; nIdx < nLen; nIdx++) { + nPart = aBytes[nIdx]; + sView += String.fromCodePoint(nPart > 251 && nPart < 254 && nIdx + 5 < nLen /* six bytes */ + ? /* (nPart - 252 << 30) may be not so safe in ECMAScript! So…: */ + (nPart - 252) * 1073741824 + + ((aBytes[++nIdx] - 128) << 24) + + ((aBytes[++nIdx] - 128) << 18) + + ((aBytes[++nIdx] - 128) << 12) + + ((aBytes[++nIdx] - 128) << 6) + + aBytes[++nIdx] - + 128 + : nPart > 247 && nPart < 252 && nIdx + 4 < nLen /* five bytes */ + ? ((nPart - 248) << 24) + + ((aBytes[++nIdx] - 128) << 18) + + ((aBytes[++nIdx] - 128) << 12) + + ((aBytes[++nIdx] - 128) << 6) + + aBytes[++nIdx] - + 128 + : nPart > 239 && nPart < 248 && nIdx + 3 < nLen /* four bytes */ + ? ((nPart - 240) << 18) + + ((aBytes[++nIdx] - 128) << 12) + + ((aBytes[++nIdx] - 128) << 6) + + aBytes[++nIdx] - + 128 + : nPart > 223 && nPart < 240 && nIdx + 2 < nLen /* three bytes */ + ? ((nPart - 224) << 12) + + ((aBytes[++nIdx] - 128) << 6) + + aBytes[++nIdx] - + 128 + : nPart > 191 && nPart < 224 && nIdx + 1 < nLen /* two bytes */ + ? ((nPart - 192) << 6) + aBytes[++nIdx] - 128 + : /* nPart < 127 ? */ /* one byte */ + nPart); + } + return sView; +} +export function strToUTF8Arr(sDOMStr) { + let aBytes; + let nChr; + const nStrLen = sDOMStr.length; + let nArrLen = 0; + /* mapping… */ + for (let nMapIdx = 0; nMapIdx < nStrLen; nMapIdx++) { + nChr = sDOMStr.codePointAt(nMapIdx); + if (nChr > 65536) { + nMapIdx++; + } + nArrLen += + nChr < 0x80 + ? 1 + : nChr < 0x800 + ? 2 + : nChr < 0x10000 + ? 3 + : nChr < 0x200000 + ? 4 + : nChr < 0x4000000 + ? 5 + : 6; + } + aBytes = new Uint8Array(nArrLen); + /* transcription… */ + let nIdx = 0; + let nChrIdx = 0; + while (nIdx < nArrLen) { + nChr = sDOMStr.codePointAt(nChrIdx); + if (nChr < 128) { + /* one byte */ + aBytes[nIdx++] = nChr; + } + else if (nChr < 0x800) { + /* two bytes */ + aBytes[nIdx++] = 192 + (nChr >>> 6); + aBytes[nIdx++] = 128 + (nChr & 63); + } + else if (nChr < 0x10000) { + /* three bytes */ + aBytes[nIdx++] = 224 + (nChr >>> 12); + aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); + aBytes[nIdx++] = 128 + (nChr & 63); + } + else if (nChr < 0x200000) { + /* four bytes */ + aBytes[nIdx++] = 240 + (nChr >>> 18); + aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); + aBytes[nIdx++] = 128 + (nChr & 63); + nChrIdx++; + } + else if (nChr < 0x4000000) { + /* five bytes */ + aBytes[nIdx++] = 248 + (nChr >>> 24); + aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); + aBytes[nIdx++] = 128 + (nChr & 63); + nChrIdx++; + } /* if (nChr <= 0x7fffffff) */ + else { + /* six bytes */ + aBytes[nIdx++] = 252 + (nChr >>> 30); + aBytes[nIdx++] = 128 + ((nChr >>> 24) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); + aBytes[nIdx++] = 128 + (nChr & 63); + nChrIdx++; + } + nChrIdx++; + } + return aBytes; +} +//# sourceMappingURL=buffer.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/buffer.library.js.map b/packages/shared/dist/buffer.library.js.map new file mode 100644 index 00000000..14d6ab56 --- /dev/null +++ b/packages/shared/dist/buffer.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"buffer.library.js","sourceRoot":"","sources":["../src/buffer.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/cipher.class.d.ts b/packages/shared/dist/cipher.class.d.ts new file mode 100644 index 00000000..a91d7269 --- /dev/null +++ b/packages/shared/dist/cipher.class.d.ts @@ -0,0 +1,18 @@ +/** Static-only cryptographic methods */ +export declare class Cipher { + #private; + /** random UUID */ + static randomKey: () => string; + /** decode base64 back into object */ + static decodeBase64: (buf?: string) => T; + /** encode object into base64 */ + static encodeBase64: (buf: unknown) => string; + static hmac: (source: string | Object, secret: string, alg?: string, len?: number) => Promise; + static hash: (source: string | Object, len?: number, alg?: string) => Promise; + static encodeBuffer: (str: string) => Uint16Array; + static decodeBuffer: (buf: Uint16Array) => string; + static encrypt: (data: any) => Promise; + static decrypt: (secret: Promise) => Promise; + static sign: (doc: any) => Promise; + static verify: (signature: Promise, doc: any) => Promise; +} diff --git a/packages/shared/dist/cipher.class.js b/packages/shared/dist/cipher.class.js new file mode 100644 index 00000000..eaa48780 --- /dev/null +++ b/packages/shared/dist/cipher.class.js @@ -0,0 +1,91 @@ +import { __classPrivateFieldGet, __esDecorate, __runInitializers, __setFunctionName } from "tslib"; +import { toHex } from '#core/shared/number.library.js'; +import { asString } from '#core/shared/coercion.library.js'; +import { Immutable, Static } from '#core/shared/class.library.js'; +import { stringify, objectify } from '#core/shared/serialize.library.js'; +import { base64DecToArr, base64EncArr, strToUTF8Arr, UTF8ArrToStr } from '#core/shared/buffer.library.js'; +const crypto = globalThis.crypto; +const subtle = crypto.subtle; +const keys = { + Algorithm: 'SHA-256', + Encoding: 'utf-8', + SignKey: 'RSASSA-PKCS1-v1_5', + TypeKey: 'AES-GCM', +}; +/** Static-only cryptographic methods */ +let Cipher = (() => { + var _Cipher_cryptoKey, _Cipher_vector, _Cipher_asymmetricKey; + let _classDecorators = [Immutable, Static]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + var Cipher = class { + static { _classThis = this; } + static { __setFunctionName(this, "Cipher"); } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + Cipher = _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + } + static { + _Cipher_cryptoKey = { value: subtle.generateKey({ name: keys.TypeKey, length: 128 }, false, ['encrypt', 'decrypt']) }; + } + static { + _Cipher_vector = { value: crypto.getRandomValues(new Uint8Array(16)) }; + } + static { + _Cipher_asymmetricKey = { value: subtle.generateKey({ + name: keys.SignKey, + modulusLength: 2048, + publicExponent: new Uint8Array([1, 0, 1]), + hash: { name: keys.Algorithm }, + }, false, ['sign', 'verify']) }; + } + /** random UUID */ + static randomKey = () => crypto.randomUUID().split('-')[0]; + /** decode base64 back into object */ + static decodeBase64 = (buf = '') => { + const uint8 = base64DecToArr(buf); // first, convert to UInt8Array + const str = UTF8ArrToStr(uint8); // convert to string + return objectify(str); // rebuild the original object + }; + /** encode object into base64 */ + static encodeBase64 = (buf) => { + const str = stringify(buf); // first, stringify the incoming buffer + const uint8 = strToUTF8Arr(str); // convert to Uint8Array + return base64EncArr(uint8); // convert to string + }; + static hmac = async (source, secret, alg = 'SHA-512', len) => { + const encoder = new TextEncoder(); + const keyData = encoder.encode(secret); + const messageData = encoder.encode(asString(source)); + const key = await subtle.importKey('raw', keyData, { name: 'HMAC', hash: { name: alg } }, false, ['sign']); + const signature = await subtle.sign('HMAC', key, messageData); + return toHex(Array.from(new Uint8Array(signature)), len); + }; + static hash = async (source, len, alg = 'SHA-256') => { + const buffer = Cipher.encodeBuffer(asString(source)); + const hash = await subtle.digest(alg, buffer); + return toHex(Array.from(new Uint8Array(hash)), len); + }; + static encodeBuffer = (str) => new Uint16Array(new TextEncoder().encode(str)); + static decodeBuffer = (buf) => new TextDecoder(keys.Encoding).decode(buf); + static encrypt = async (data) => subtle.encrypt({ name: keys.TypeKey, iv: __classPrivateFieldGet(Cipher, _classThis, "f", _Cipher_vector) }, await __classPrivateFieldGet(Cipher, _classThis, "f", _Cipher_cryptoKey), Cipher.encodeBuffer(data)) + .then(result => new Uint16Array(result)) + .then(Cipher.decodeBuffer); + static decrypt = async (secret) => subtle.decrypt({ name: keys.TypeKey, iv: __classPrivateFieldGet(Cipher, _classThis, "f", _Cipher_vector) }, await __classPrivateFieldGet(Cipher, _classThis, "f", _Cipher_cryptoKey), await secret) + .then(result => new Uint16Array(result)) + .then(Cipher.decodeBuffer); + static sign = async (doc) => subtle.sign(keys.SignKey, (await __classPrivateFieldGet(Cipher, _classThis, "f", _Cipher_asymmetricKey)).privateKey, Cipher.encodeBuffer(doc)) + .then(result => new Uint16Array(result)) + .then(Cipher.decodeBuffer); + static verify = async (signature, doc) => subtle.verify(keys.SignKey, (await __classPrivateFieldGet(Cipher, _classThis, "f", _Cipher_asymmetricKey)).publicKey, await signature, Cipher.encodeBuffer(doc)); + static { + __runInitializers(_classThis, _classExtraInitializers); + } + }; + return Cipher = _classThis; +})(); +export { Cipher }; +//# sourceMappingURL=cipher.class.js.map \ No newline at end of file diff --git a/packages/shared/dist/cipher.class.js.map b/packages/shared/dist/cipher.class.js.map new file mode 100644 index 00000000..ef4e2ed2 --- /dev/null +++ b/packages/shared/dist/cipher.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cipher.class.js","sourceRoot":"","sources":["../src/cipher.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/class.library.d.ts b/packages/shared/dist/class.library.d.ts new file mode 100644 index 00000000..ad7dec89 --- /dev/null +++ b/packages/shared/dist/class.library.d.ts @@ -0,0 +1,10 @@ +import type { Constructor } from '#core/shared/type.library.js'; +/** + * Some interesting Class Decorators + */ +/** decorator to freeze a Class to prevent modification */ +export declare function Immutable(value: T, { kind, name, addInitializer }: ClassDecoratorContext): T | void; +/** register a Class for serialization */ +export declare function Serializable(value: T, { kind, name, addInitializer }: ClassDecoratorContext): T | void; +/** make a Class not instantiable */ +export declare function Static(value: T, { kind, name }: ClassDecoratorContext): T | void; diff --git a/packages/shared/dist/class.library.js b/packages/shared/dist/class.library.js new file mode 100644 index 00000000..1dda532f --- /dev/null +++ b/packages/shared/dist/class.library.js @@ -0,0 +1,71 @@ +import { ownEntries } from '#core/shared/reflection.library.js'; +import { Registry } from '#core/shared/serialize.library.js'; +/** + * Some interesting Class Decorators + */ +/** decorator to freeze a Class to prevent modification */ +export function Immutable(value, { kind, name, addInitializer }) { + name = String(name); + switch (kind) { + case 'class': + const wrapper = { + [name]: class extends value { + constructor(...args) { + super(...args); + Object.freeze(this); // freeze the instance + } + } + }[name]; + addInitializer(() => { + const protect = (obj) => { + ownEntries(Object.getOwnPropertyDescriptors(obj)) + .filter(([name]) => name !== 'constructor') // dont touch the constructor + .forEach(([name, { configurable, writable }]) => { + if (configurable) { + const update = { configurable: false }; + if (writable) + update.writable = false; // only data descriptors have 'writable' + Object.defineProperty(obj, name, update); + } + }); + }; + protect(value); // protect original static members + protect(value.prototype); // protect original prototype members + protect(wrapper); // protect wrapper static members + protect(wrapper.prototype); // protect wrapper prototype members + }); + return wrapper; + default: + throw new Error(`@Immutable decorating unknown 'kind': ${kind} (${name})`); + } +} +/** register a Class for serialization */ +export function Serializable(value, { kind, name, addInitializer }) { + name = String(name); // cast as String + switch (kind) { + case 'class': + addInitializer(() => Registry.set(`$${name}`, value)); // register the class for serialization, via its toString() method + return value; + default: + throw new Error(`@Serializable decorating unknown 'kind': ${kind} (${name})`); + } +} +/** make a Class not instantiable */ +export function Static(value, { kind, name }) { + name = String(name); + switch (kind) { + case 'class': + const wrapper = { + [name]: class extends value { + constructor(...args) { + super(...args); + throw new TypeError(`${name} is not a constructor`); + } + } + }[name]; + return wrapper; + default: + throw new Error(`@Static decorating unknown 'kind': ${kind} (${name})`); + } +} +//# sourceMappingURL=class.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/class.library.js.map b/packages/shared/dist/class.library.js.map new file mode 100644 index 00000000..694d10d8 --- /dev/null +++ b/packages/shared/dist/class.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"class.library.js","sourceRoot":"","sources":["../src/class.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/coercion.library.d.ts b/packages/shared/dist/coercion.library.d.ts new file mode 100644 index 00000000..7bda4623 --- /dev/null +++ b/packages/shared/dist/coercion.library.d.ts @@ -0,0 +1,14 @@ +/** Coerce {value} into {value[]} ( if not already ), with optional {fill} Object */ +export declare function asArray(arr: Exclude, string> | undefined): T[]; +export declare function asArray(arr: T | Exclude | undefined, string>): NonNullable[]; +export declare function asArray(arr: Iterable | ArrayLike, fill: K): K[]; +/** stringify if not nullish */ +export declare function asString(str?: T): string; +/** convert String | Number | BigInt to Number */ +export declare function asNumber(str?: string | number | bigint): number; +/** convert String | Number to BigInt */ +export declare function asInteger(str?: T): bigint; +/** test if can convert String to Numeric */ +export declare function isNumeric(str?: string | number | bigint): boolean; +/** return as Number if possible, else original String */ +export declare const ifNumeric: (str: string | number | bigint, stripZero?: boolean) => string | number; diff --git a/packages/shared/dist/coercion.library.js b/packages/shared/dist/coercion.library.js new file mode 100644 index 00000000..690a7b58 --- /dev/null +++ b/packages/shared/dist/coercion.library.js @@ -0,0 +1,72 @@ +import { clone, stringify } from '#core/shared/serialize.library.js'; +import { isIntegerLike, isArrayLike, isDefined, isInteger, isIterable, isNullish, isString, isUndefined, asType, isNumber } from '#core/shared/type.library.js'; +export function asArray(arr = [], fill) { + switch (true) { + case isArrayLike(arr): // allow for {length:nn} objects + case isIterable(arr) && !isString(arr): // dont iterate Strings + return Array.from(arr, val => { + return isUndefined(fill) || isDefined(val) + ? val // if no {fill}, then use {val} + : clone(fill); // clone {fill} to create new Objects + }); + default: + return Array.of(arr); + } +} +/** stringify if not nullish */ +export function asString(str) { + return isNullish(str) + ? '' + : isInteger(str) + ? str.toString() + 'n' + : stringify(str); +} +/** convert String | Number | BigInt to Number */ +export function asNumber(str) { + return parseFloat(str?.toString() ?? 'NaN'); +} +/** convert String | Number to BigInt */ +export function asInteger(str) { + const arg = asType(str); + switch (arg.type) { + case 'BigInt': + return arg.value; // already a BigInt + case 'Number': + return BigInt(Math.trunc(arg.value)); // cast as BigInt + case 'String': + return (isIntegerLike(arg.value)) // String representation of a BigInt + ? BigInt(arg.value.slice(0, -1)) // get rid of trailing 'n' + : BigInt(arg.value); + default: + return str; + } +} +/** test if can convert String to Numeric */ +export function isNumeric(str) { + const arg = asType(str); + switch (arg.type) { + case 'Number': + case 'BigInt': + return true; + case 'String': + return isIntegerLike(arg.value) + ? true // is Number | BigInt + : !isNaN(asNumber(str)) && isFinite(str); // test if Number + default: + return false; + } +} +/** return as Number if possible, else original String */ +export const ifNumeric = (str, stripZero = false) => { + switch (true) { + case isInteger(str): // BigInt → Number + return Number(str); + case isNumber(str): // Number → as-is + return str; + case isNumeric(str) && (!str?.toString().startsWith('0') || stripZero): + return asNumber(str); // numeric String → Number + default: + return str; // non-numeric String → as-is + } +}; +//# sourceMappingURL=coercion.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/coercion.library.js.map b/packages/shared/dist/coercion.library.js.map new file mode 100644 index 00000000..ad6ab2ee --- /dev/null +++ b/packages/shared/dist/coercion.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"coercion.library.js","sourceRoot":"","sources":["../src/coercion.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/enumerate.library.d.ts b/packages/shared/dist/enumerate.library.d.ts new file mode 100644 index 00000000..ed47402a --- /dev/null +++ b/packages/shared/dist/enumerate.library.d.ts @@ -0,0 +1,62 @@ +import type { Index, Prettify, Invert, Property, KeyOf, ValueOf, EntryOf, LooseKey, WellKnownSymbols } from '#core/shared/type.library.js'; +/** used to identify the Enumify type */ declare const tag: "Enumify"; +declare module './type.library.js' { + interface TypeValueMap { + Enumify: { + type: 'Enumify'; + value: Enum.wrap>>; + }; + } + interface IgnoreOfMap extends Methods { + } +} +/** prototype entries with string | symbol keys */ +type Proto> = Prettify<{ + /** number of entries in the Enum */ count(): number; + /** array of all enumerable property names */ keys(): KeyOf[]; + /** array of all enumerable object values */ values(): ValueOf[]; + /** tuple of enumerable entries */ entries(): EntryOf[]; + /** return an object with the keys and values swapped */ invert(): Invert; + /** check if a 'key' exists in the Enum */ has(key: LooseKey>): boolean; + /** check if a 'value' exists in the Enum */ includes(search: LooseKey>): boolean; + /** return the key for a given value */ keyOf(search: LooseKey>): KeyOf; + /** iterate through all Enum entries */ forEach(fn: (entry: EntryOf, index: number, enumify: wrap) => void, thisArg?: any): void; + /** filter Enum entries and return a new Enum */ filter(fn: (entry: EntryOf, index: number, enumify: wrap) => boolean, thisArg?: any): wrap>; + /** map Enum entries and return a new Enum */ map(fn: (entry: EntryOf, index: number, enumify: wrap) => any, thisArg?: any): wrap>; + /** extend an existing Enum with new property-entries */ extend(list: E): wrap> & Index>>; + /** extend an existing Enum with new property-entries */ extend(list: E): wrap & E>>; + /** iterate through all Enum entries */ readonly [Symbol.iterator]: () => IterableIterator>; + /** used to identify the Enumify type */ readonly [Symbol.toStringTag]: typeof tag; +}>; +/** Enum properties & methods */ type wrap> = Enum.props & Methods; +/** Enum methods (filtered) */ type Methods = any> = Omit, WellKnownSymbols>; +/** allowable arguments for Enumify */ type ArrayArg = string[] | readonly string[]; +/** allowable arguments for Enumify */ type ObjectArg = Property; +/** namespace for Enum type-helpers */ +export declare namespace Enum { + /** Enum properties & methods */ type wrap> = props & Methods; + /** Enum methods (filtered) */ type methods = any> = keyof Methods; + /** Enum own properties */ type props> = Readonly; +} +/** + * Create a premium, immutable 'Enum' object with a fluent API. + * It supports both numerical and string-based indexing, as well as a full suite of helper methods like `keys()`, `values()`, and `forEach()`. + * Enums created with `enumify` are designed to be extremely high-performance and lightweight. + * + * @param list - The array of strings, or object of key-value pairs to transform into an Enum. + * @returns A frozen Enum object with both properties and helpful iteration methods. + * + * @example + * ```typescript + * const Status = enumify(['Active', 'Inactive', 'Pending']); + * console.log(Status.Active); // 0 + * console.log(Status.keys()); // ['Active', 'Inactive', 'Pending'] + * ``` + */ +export declare function enumify(list: T): Enum.wrap>; +export declare function enumify(list: T): Enum.wrap; +/** create an entry in the Serialization Registry to describe how to rebuild an Enum */ +export declare class Enumify { + constructor(list: Property); +} +export {}; diff --git a/packages/shared/dist/enumerate.library.js b/packages/shared/dist/enumerate.library.js new file mode 100644 index 00000000..89ac1efb --- /dev/null +++ b/packages/shared/dist/enumerate.library.js @@ -0,0 +1,83 @@ +import { __esDecorate, __runInitializers } from "tslib"; +import { secure } from '#core/shared/utility.library.js'; +import { Serializable } from '#core/shared/class.library.js'; +import { stringify } from '#core/shared/serialize.library.js'; +import { memoizeMethod } from '#core/shared/function.library.js'; +import { ownEntries } from '#core/shared/reflection.library.js'; +import { getProxy } from './proxy.library.js'; +import { asType, isArray, isNumber } from '#core/shared/type.library.js'; +/** used to identify the Enumify type */ const tag = 'Enumify'; +/** helper method to create a property descriptor */ +function value(val) { + return { + enumerable: false, + configurable: false, + writable: false, + value: val + }; +} +/** + * private instance of the Enum Prototype, which is then Used to create each new Object-Enum +*/ +const ENUM = secure(Object.create(null, { + count: memoizeMethod('count', function () { return this.entries().length; }), + keys: memoizeMethod('keys', function () { return this.entries().map(([key]) => key); }), + values: memoizeMethod('values', function () { return this.entries().map(([_, val]) => val); }), + entries: memoizeMethod('entries', function () { return ownEntries(this, true); }), + invert: memoizeMethod('invert', function () { return enumify(this.entries().reduce((acc, [key, val]) => ({ ...acc, [val]: key }), {})); }), + toString: memoizeMethod('toString', function () { return stringify(this.toJSON()); }), + has: value(function (key) { return this.keys().includes(key); }), + includes: value(function (search) { return this.values().includes(search); }), + keyOf: value(function (search) { return this.invert()[search]; }), + extend: value(function (list) { return enumify.call(this, list); }), + forEach: value(function (fn, thisArg) { this.entries().forEach((entry, index) => fn.call(thisArg, entry, index, this)); }), + filter: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => (fn.call(thisArg, entry, index, this) ? Object.assign(acc, { [entry[0]]: entry[1] }) : acc), {})); }), + map: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => { const res = fn.call(thisArg, entry, index, this); return Object.assign(acc, isArray(res) && res.length === 2 ? { [res[0]]: res[1] } : { [entry[0]]: res }); }, {})); }), + [Symbol.iterator]: value(function () { return this.entries()[Symbol.iterator](); }), + [Symbol.toStringTag]: value(tag), +})); +export function enumify(list) { + const proto = this ?? ENUM; + const arg = asType(list); + let stash = {}; + switch (arg.type) { + case 'Enumify': + case 'Object': + Object.assign(stash, arg.value); + break; + case 'Array': + arg.value.forEach((key, index) => { + if (isNumber(key)) + throw new Error('Enumify: numeric keys are not supported'); + Object.assign(stash, { [key]: index }); + }); + break; + default: + throw new Error(`Enumify: invalid argument type: ${arg.type}`); + } + const target = Object.create(proto, Object.getOwnPropertyDescriptors(stash)); + return getProxy(target); +} +/** create an entry in the Serialization Registry to describe how to rebuild an Enum */ +let Enumify = (() => { + let _classDecorators = [Serializable]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + var Enumify = class { + static { _classThis = this; } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + Enumify = _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + __runInitializers(_classThis, _classExtraInitializers); + } + constructor(list) { + return enumify(list); + } + }; + return Enumify = _classThis; +})(); +export { Enumify }; +//# sourceMappingURL=enumerate.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/enumerate.library.js.map b/packages/shared/dist/enumerate.library.js.map new file mode 100644 index 00000000..62596ced --- /dev/null +++ b/packages/shared/dist/enumerate.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"enumerate.library.js","sourceRoot":"","sources":["../src/enumerate.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/function.library.d.ts b/packages/shared/dist/function.library.d.ts new file mode 100644 index 00000000..5e396dcb --- /dev/null +++ b/packages/shared/dist/function.library.d.ts @@ -0,0 +1,11 @@ +import { type Property } from '#core/shared/type.library.js'; +type Curry = Args extends [infer FirstArg, ...infer RestArgs] ? (arg: FirstArg) => Curry : Res; +/** curry a Function to allow partial calls */ +export declare function curry(fn: (...args: Args) => Res): Curry; +/** generic function to memoize repeated function calls */ +export declare function memoizeFunction any>(fn: F): (...args: unknown[]) => ReturnType | undefined; +/** manually clear the memoization cache for an object */ +export declare function clearCache(obj: object): void; +/** define a Descriptor for an Object's memoized-method */ +export declare function memoizeMethod, T = any>(name: PropertyKey, fn: (this: Context, ...args: any[]) => T): PropertyDescriptor; +export {}; diff --git a/packages/shared/dist/function.library.js b/packages/shared/dist/function.library.js new file mode 100644 index 00000000..f81e1392 --- /dev/null +++ b/packages/shared/dist/function.library.js @@ -0,0 +1,54 @@ +import { secure } from '#core/shared/utility.library.js'; +import { isUndefined } from '#core/shared/type.library.js'; +/** curry a Function to allow partial calls */ +export function curry(fn) { + return function curried(...args) { + return (args.length >= fn.length) + ? fn(...args) + : (...nextArgs) => curried(...args, ...nextArgs); + }; +} +/** generic function to memoize repeated function calls */ +export function memoizeFunction(fn) { + const cache = new Map(); // using a Map for better key handling than plain objects + return function (...args) { + const key = JSON.stringify(args); // create a unique key from arguments + console.log('memoize: ', key); + if (!cache.has(key)) { + // @ts-ignore + const result = fn.apply(this, args); // call the original function with the correct context + console.log('set: ', result); + cache.set(key, Object.freeze(result)); // stash the result for subsequent calls + } + else + console.log('get: ', cache.get(key)); + return cache.get(key); + }; +} +const wm = new WeakMap(); +/** manually clear the memoization cache for an object */ +export function clearCache(obj) { + wm.delete(obj); +} +/** define a Descriptor for an Object's memoized-method */ +export function memoizeMethod(name, fn) { + return { + enumerable: false, + configurable: false, + writable: false, + value: function (...args) { + const key = `${String(name)},${JSON.stringify(args)}`; + let cache = wm.get(this); + if (!cache) { // add a new object into the WeakMap + cache = Object.create(null); + wm.set(this, cache); + } + if (isUndefined(cache[key])) { // first time for this method + cache[key] = fn.apply(this, args); // evaluate the method + secure(cache[key]); // freeze the returned value + } + return cache[key]; + } + }; +} +//# sourceMappingURL=function.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/function.library.js.map b/packages/shared/dist/function.library.js.map new file mode 100644 index 00000000..6a23fe01 --- /dev/null +++ b/packages/shared/dist/function.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"function.library.js","sourceRoot":"","sources":["../src/function.library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,WAAW,EAAiB,MAAM,8BAA8B,CAAC;AA+B1E,8CAA8C;AAC9C,MAAM,UAAU,KAAK,CAA0B,EAA0B;IACxE,OAAO,SAAS,OAAO,CAAC,GAAG,IAAW;QACrC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC;YAChC,CAAC,CAAC,EAAE,CAAC,GAAI,IAAa,CAAC;YACvB,CAAC,CAAC,CAAC,GAAG,QAAe,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAA;IACzD,CAAqB,CAAC;AACvB,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,eAAe,CAAoC,EAAK;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC,CAAM,yDAAyD;IAE9G,OAAO,UAAU,GAAG,IAAe;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAY,qCAAqC;QAClF,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,aAAa;YACb,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAS,sDAAsD;YACnG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAQ,wCAAwC;QACvF,CAAC;;YACI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1C,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAA;AACF,CAAC;AAED,MAAM,EAAE,GAAG,IAAI,OAAO,EAAyB,CAAC;AAEhD,yDAAyD;AACzD,MAAM,UAAU,UAAU,CAAC,GAAW;IACrC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,aAAa,CAAmC,IAAiB,EAAE,EAAwC;IAC1H,OAAO;QACN,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;QACnB,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,UAAyB,GAAG,IAAW;YAC7C,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,IAAI,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,IAAW,CAAC,CAAC;YAEhC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAqB,oCAAoC;gBACrE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAkB,CAAC;gBAC7C,EAAE,CAAC,GAAG,CAAC,IAAW,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAY,6BAA6B;gBACtE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAS,sBAAsB;gBACjE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAiB,4BAA4B;YACjE,CAAC;YAED,OAAO,KAAK,CAAC,GAAG,CAAM,CAAC;QACxB,CAAC;KACqB,CAAC;AACzB,CAAC"} \ No newline at end of file diff --git a/packages/shared/dist/index.d.ts b/packages/shared/dist/index.d.ts new file mode 100644 index 00000000..f38904f4 --- /dev/null +++ b/packages/shared/dist/index.d.ts @@ -0,0 +1,19 @@ +export * from './array.library.js'; +export * from './buffer.library.js'; +export * from './cipher.class.js'; +export * from './class.library.js'; +export * from './coercion.library.js'; +export * from './enumerate.library.js'; +export * from './function.library.js'; +export * from './logify.class.js'; +export * from './number.library.js'; +export * from './object.library.js'; +export * from './pledge.class.js'; +export * from './prototype.library.js'; +export * from './proxy.library.js'; +export * from './reflection.library.js'; +export * from './serialize.library.js'; +export * from './storage.library.js'; +export * from './string.library.js'; +export * from './type.library.js'; +export * from './utility.library.js'; diff --git a/packages/shared/dist/index.js b/packages/shared/dist/index.js new file mode 100644 index 00000000..145e9d95 --- /dev/null +++ b/packages/shared/dist/index.js @@ -0,0 +1,20 @@ +export * from './array.library.js'; +export * from './buffer.library.js'; +export * from './cipher.class.js'; +export * from './class.library.js'; +export * from './coercion.library.js'; +export * from './enumerate.library.js'; +export * from './function.library.js'; +export * from './logify.class.js'; +export * from './number.library.js'; +export * from './object.library.js'; +export * from './pledge.class.js'; +export * from './prototype.library.js'; +export * from './proxy.library.js'; +export * from './reflection.library.js'; +export * from './serialize.library.js'; +export * from './storage.library.js'; +export * from './string.library.js'; +export * from './type.library.js'; +export * from './utility.library.js'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/shared/dist/index.js.map b/packages/shared/dist/index.js.map new file mode 100644 index 00000000..c6893f49 --- /dev/null +++ b/packages/shared/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"} \ No newline at end of file diff --git a/packages/shared/dist/logify.class.d.ts b/packages/shared/dist/logify.class.d.ts new file mode 100644 index 00000000..18e07980 --- /dev/null +++ b/packages/shared/dist/logify.class.d.ts @@ -0,0 +1,33 @@ +import { type ValueOf } from '#core/shared/type.library.js'; +declare const Method: { + readonly Log: "log"; + readonly Info: "info"; + readonly Warn: "warn"; + readonly Debug: "debug"; + readonly Error: "error"; +}; +/** + * provide standard logging methods to the console for a class + */ +export declare class Logify { + #private; + /** + * if {catch:true} then show a warning on the console and return + * otherwise show an error on the console and re-throw the error + */ + catch(...msg: any[]): void; + /** console.log */ log: (...msg: any[]) => void; + /** console.info */ info: (...msg: any[]) => void; + /** console.warn */ warn: (...msg: any[]) => void; + /** console.debug */ debug: (...msg: any[]) => void; + /** console.error */ error: (...msg: any[]) => void; + constructor(self?: Logify.Constructor | string, opts?: Logify.Constructor); +} +export declare namespace Logify { + type Method = ValueOf; + interface Constructor { + debug?: boolean | undefined; + catch?: boolean | undefined; + } +} +export {}; diff --git a/packages/shared/dist/logify.class.js b/packages/shared/dist/logify.class.js new file mode 100644 index 00000000..d2035cd1 --- /dev/null +++ b/packages/shared/dist/logify.class.js @@ -0,0 +1,70 @@ +import { __esDecorate, __runInitializers } from "tslib"; +import { Immutable } from '#core/shared/class.library.js'; +import { asType, isObject } from '#core/shared/type.library.js'; +const Method = { + Log: 'log', + Info: 'info', + Warn: 'warn', + Debug: 'debug', + Error: 'error', +}; +/** + * provide standard logging methods to the console for a class + */ +let Logify = (() => { + let _classDecorators = [Immutable]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + var Logify = class { + static { _classThis = this; } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + Logify = _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + __runInitializers(_classThis, _classExtraInitializers); + } + #name; + #opts = {}; + #log(method, ...msg) { + if (this.#opts.debug) + console[method](this.#name, ...msg); + } + /** + * if {catch:true} then show a warning on the console and return + * otherwise show an error on the console and re-throw the error + */ + catch(...msg) { + if (this.#opts.catch) { + this.warn(...msg); // show a warning on the console + return; // safe-return + } + this.error(...msg); // this goes to the console + throw new Error(`${this.#name}${msg.map(m => isObject(m) ? JSON.stringify(m) : String(m)).join(' ')}`); // catch will be loud or silent, based on #catch config + } + /** console.log */ log = (...msg) => this.#log(Method.Log, ...msg); + /** console.info */ info = (...msg) => this.#log(Method.Info, ...msg); + /** console.warn */ warn = (...msg) => this.#log(Method.Warn, ...msg); + /** console.debug */ debug = (...msg) => this.#log(Method.Debug, ...msg); + /** console.error */ error = (...msg) => this.#log(Method.Error, ...msg); + constructor(self, opts = {}) { + const arg = asType(self); + switch (arg.type) { + case 'String': + this.#name = arg.value; + break; + // @ts-ignore + case 'Object': + Object.assign(opts, arg.value); + default: + this.#name = (self ?? this).constructor.name.concat(': ') ?? ''; + } + this.#opts.debug = opts.debug ?? false; // default debug to 'false' + this.#opts.catch = opts.catch ?? false; // default catch to 'false' + } + }; + return Logify = _classThis; +})(); +export { Logify }; +//# sourceMappingURL=logify.class.js.map \ No newline at end of file diff --git a/packages/shared/dist/logify.class.js.map b/packages/shared/dist/logify.class.js.map new file mode 100644 index 00000000..4b11531f --- /dev/null +++ b/packages/shared/dist/logify.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"logify.class.js","sourceRoot":"","sources":["../src/logify.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/number.library.d.ts b/packages/shared/dist/number.library.d.ts new file mode 100644 index 00000000..a1b7e6ef --- /dev/null +++ b/packages/shared/dist/number.library.d.ts @@ -0,0 +1,14 @@ +import type { TValues } from '#core/shared/type.library.js'; +/** show Hex value of a number */ +export declare const toHex: (num?: TValues, len?: number) => string; +/** apply an Ordinal suffix */ +export declare const suffix: (idx: number) => string; +/** split a value into an array */ +export declare function split(nbr: T, chr?: string, zero?: boolean): number[]; +export declare function split(nbr: T, chr?: string, zero?: boolean): (string | number)[]; +/** fix a string to set decimal precision */ +export declare const fix: (nbr?: string | number, max?: number) => string; +/** remove ':' from an HH:MI string, return as number */ +export declare const asTime: (hhmi: string | number) => number; +/** format a value as currency */ +export declare const asCurrency: (str: string | number, scale?: number, currency?: string) => string; diff --git a/packages/shared/dist/number.library.js b/packages/shared/dist/number.library.js new file mode 100644 index 00000000..5ef947d0 --- /dev/null +++ b/packages/shared/dist/number.library.js @@ -0,0 +1,35 @@ +import { asArray, asNumber, ifNumeric } from '#core/shared/coercion.library.js'; +/** show Hex value of a number */ +export const toHex = (num = [], len) => asArray(num) // ensure array + .flat(1_000_000) // flatten any arrays to arbitrary depth + .filter(Number.isInteger) // ensure integers + .map(val => (val + 0x100).toString(16).slice(-2)) + .join('') + .toLowerCase() + .substring(0, len ?? Number.MAX_SAFE_INTEGER); +/** apply an Ordinal suffix */ +export const suffix = (idx) => { + const str = String(idx ?? ''); // so we can use 'endsWith' + switch (true) { + case str.endsWith('1') && !str.endsWith('11'): + return str + 'st'; + case str.endsWith('2') && !str.endsWith('12'): + return str + 'nd'; + case str.endsWith('3') && !str.endsWith('13'): + return str + 'rd'; + default: + return str + 'th'; + } +}; +export function split(nbr, chr = '.', zero = true) { + return nbr?.toString().split(chr).map(val => ifNumeric(val, zero)) + || []; +} +; +/** fix a string to set decimal precision */ +export const fix = (nbr = 0, max = 2) => asNumber(nbr).toFixed(max); +/** remove ':' from an HH:MI string, return as number */ +export const asTime = (hhmi) => Number(String(hhmi).replace(':', '')); +/** format a value as currency */ +export const asCurrency = (str, scale = 2, currency = 'AUD') => str.toLocaleString(undefined, { style: 'currency', currency, maximumFractionDigits: scale }); +//# sourceMappingURL=number.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/number.library.js.map b/packages/shared/dist/number.library.js.map new file mode 100644 index 00000000..d8838ae1 --- /dev/null +++ b/packages/shared/dist/number.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"number.library.js","sourceRoot":"","sources":["../src/number.library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAGhF,iCAAiC;AACjC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,MAAuB,EAAE,EAAE,GAAY,EAAE,EAAE,CAChE,OAAO,CAAC,GAAG,CAAC,CAAuB,eAAe;KAChD,IAAI,CAAC,SAAS,CAAC,CAAoB,wCAAwC;KAC3E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAgB,mBAAmB;KAC3D,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAChD,IAAI,CAAC,EAAE,CAAC;KACR,WAAW,EAAE;KACb,SAAS,CAAC,CAAC,EAAE,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAE/C,8BAA8B;AAC9B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAc,2BAA2B;IAEvE,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC5C,OAAO,GAAG,GAAG,IAAI,CAAC;QACnB,KAAK,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC5C,OAAO,GAAG,GAAG,IAAI,CAAC;QACnB,KAAK,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC5C,OAAO,GAAG,GAAG,IAAI,CAAC;QACnB;YACC,OAAO,GAAG,GAAG,IAAI,CAAC;IACpB,CAAC;AACF,CAAC,CAAA;AAKD,MAAM,UAAU,KAAK,CAA4B,GAAO,EAAE,MAAc,GAAG,EAAE,OAAgB,IAAI;IAChG,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;WAC9D,EAAE,CAAA;AACP,CAAC;AAAA,CAAC;AAEF,4CAA4C;AAC5C,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAuB,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,CACxD,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAE5B,wDAAwD;AACxD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAqB,EAAE,EAAE,CAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAEvC,iCAAiC;AACjC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAoB,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE,CAC/E,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC"} \ No newline at end of file diff --git a/packages/shared/dist/object.library.d.ts b/packages/shared/dist/object.library.d.ts new file mode 100644 index 00000000..fee90c51 --- /dev/null +++ b/packages/shared/dist/object.library.d.ts @@ -0,0 +1,37 @@ +import type { Extend, Property } from '#core/shared/type.library.js'; +/** Get nested value */ +export declare function extract(obj: any, path: string | number, dflt?: T): T; +/** remove quotes around property names */ +export declare const unQuoteObj: (obj: any) => string; +/** copy enumerable properties to a new Object */ +export declare const asObject: (obj?: Record) => T; +/** deep-compare object values for equality */ +export declare const isEqual: (obj1?: any, obj2?: any) => boolean; +/** find all methods on an Object */ +export declare const getMethods: (obj: any, all?: boolean) => PropertyKey[]; +/** extract only defined values from Object */ +export declare function ifDefined>(obj: T): T; +/** extract a subset of keys from an object */ +export declare const pick: , K extends string>(obj: T, ...keys: K[]) => Partial; +/** extract a named key from an array of objects */ +export declare const pluck: (objs: T[], key: K) => T[K][]; +/** extend an object with the properties of another */ +export declare const extend: (obj: T, ...objs: U[]) => T; +export declare const countProperties: (obj?: {}) => number; +/** + * helper to define objects with fixed literal properties + * and a loose index signature for further extensions. + * @example + * ``` + * const obj = looseIndex()({ foo: 'bar', bar: 'foo' }); + * type obj = typeof obj + * ``` + */ +export declare function looseIndex(): (obj: T | (() => T)) => Extend; +export declare function looseIndex(obj: T | (() => T)): Extend; +export declare namespace looseIndex { + var stringSymbol: (obj: T | (() => T)) => Extend; + var symbolRegExp: (obj: T | (() => T)) => Extend; + var symbolString: (obj: T | (() => T)) => Extend; + var stringString: (obj: T | (() => T)) => Extend; +} diff --git a/packages/shared/dist/object.library.js b/packages/shared/dist/object.library.js new file mode 100644 index 00000000..ff4a8668 --- /dev/null +++ b/packages/shared/dist/object.library.js @@ -0,0 +1,95 @@ +import { ownKeys, ownEntries } from '#core/shared/reflection.library.js'; +import { isObject, isArray, isReference, isFunction, isDefined, isEmpty, isNullish } from '#core/shared/type.library.js'; +/** Get nested value */ +export function extract(obj, path, dflt) { + if (isEmpty(path)) + return obj; // finished searching + if (!isObject(obj) && !isArray(obj)) + return obj; + return path + .toString() + .replace(/\[([^\[\]]*)\]/g, '.$1.') // convert [indexes] to properties + .split('.') + .filter(field => !isEmpty(field)) // remove empty fields + .reduce((acc, field) => acc?.[field] ?? null, obj) ?? dflt; +} +/** remove quotes around property names */ +export const unQuoteObj = (obj) => { + return JSON.stringify(obj) + ?.replace(/"([^"]+)":/g, '$1: ') + ?.replace(/,/g, ', '); +}; +/** copy enumerable properties to a new Object */ +export const asObject = (obj) => { + if (isNullish(obj) || !isObject(obj)) + return obj; + const temp = isArray(obj) ? [] : {}; + ownKeys(obj) + .forEach(key => temp[key] = asObject(obj[key])); + return temp; +}; +/** deep-compare object values for equality */ +export const isEqual = (obj1 = {}, obj2 = {}) => { + const keys = new Set(); // union of unique keys from both Objects + const keys1 = isFunction(obj1.keys) ? Array.from(obj1.keys()) : ownKeys(obj1); + const keys2 = isFunction(obj2.keys) ? Array.from(obj2.keys()) : ownKeys(obj2); + keys1.forEach(key => keys.add(key)); + keys2.forEach(key => keys.add(key)); + return [...keys] // cast as Array + .every(key => { + const val1 = obj1[key]; + const val2 = obj2[key]; + return isReference(val1) && isReference(val2) + ? isEqual(val1, val2) // recurse into object + : val1 === val2; + }); +}; +/** find all methods on an Object */ +export const getMethods = (obj, all = false) => { + const properties = new Set(); + let currentObj = obj; + do { + Object + .getOwnPropertyNames(currentObj) + .map(key => properties.add(key)); + } while (all && (currentObj = Object.getPrototypeOf(currentObj))); + return [...properties.keys()] + .filter(key => isFunction(obj[key])); +}; +/** extract only defined values from Object */ +export function ifDefined(obj) { + return ownEntries(obj) + .reduce((acc, [key, val]) => { + if (isDefined(val)) + acc[key] = val; + return acc; + }, {}); +} +/** extract a subset of keys from an object */ +export const pick = (obj, ...keys) => { + const ownKeys = Object.getOwnPropertyNames(obj); + return keys.reduce((acc, key) => { + if (ownKeys.includes(key)) + acc[key] = obj[key]; + return acc; + }, {}); +}; +/** extract a named key from an array of objects */ +export const pluck = (objs, key) => objs.map(obj => obj[key]); +/** extend an object with the properties of another */ +export const extend = (obj, ...objs) => Object.assign(obj, ...objs); +export const countProperties = (obj = {}) => ownKeys(obj).length; +export function looseIndex(arg) { + if (isDefined(arg)) + return isFunction(arg) ? arg() : arg; + return (obj) => isFunction(obj) ? obj() : obj; +} +/** loose object with symbols values */ +looseIndex.stringSymbol = looseIndex(); +/** loose object with symbol keys and RegExp values */ +looseIndex.symbolRegExp = looseIndex(); +/** loose object with symbol keys and string values */ +looseIndex.symbolString = looseIndex(); +/** loose object with string keys and string values */ +looseIndex.stringString = looseIndex(); +//# sourceMappingURL=object.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/object.library.js.map b/packages/shared/dist/object.library.js.map new file mode 100644 index 00000000..1ad28f46 --- /dev/null +++ b/packages/shared/dist/object.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"object.library.js","sourceRoot":"","sources":["../src/object.library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzH,uBAAuB;AACvB,MAAM,UAAU,OAAO,CAAI,GAAQ,EAAE,IAAqB,EAAE,IAAQ;IACnE,IAAI,OAAO,CAAC,IAAI,CAAC;QAChB,OAAO,GAAQ,CAAC,CAAoB,qBAAqB;IAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAClC,OAAO,GAAQ,CAAC;IAEjB,OAAO,IAAI;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAW,kCAAkC;SAC/E,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAY,sBAAsB;SAClE,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAA;AAC5D,CAAC;AAED,0CAA0C;AAC1C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE;IACtC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QACzB,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;QAChC,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AACvB,CAAC,CAAA;AAED,iDAAiD;AACjD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,GAA8B,EAAE,EAAE;IAC7D,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnC,OAAO,GAAQ,CAAC;IAEjB,MAAM,IAAI,GAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC;SACV,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEjD,OAAO,IAAS,CAAC;AAClB,CAAC,CAAA;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,OAAY,EAAE,EAAE,OAAY,EAAE,EAAW,EAAE;IAClE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAe,CAAC,CAAW,yCAAyC;IACxF,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAc,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3F,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAc,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3F,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAqB,gBAAgB;SACnD,KAAK,CAAC,GAAG,CAAC,EAAE;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAEvB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC;YAC5C,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAgB,sBAAsB;YAC3D,CAAC,CAAC,IAAI,KAAK,IAAI,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,oCAAoC;AACpC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE;IACnD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAe,CAAC;IAC1C,IAAI,UAAU,GAAG,GAAG,CAAC;IAErB,GAAG,CAAC;QACH,MAAM;aACJ,mBAAmB,CAAC,UAAU,CAAC;aAC/B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAClC,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,EAAE;IAElE,OAAO,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;SAC3B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC,CAAA;AAED,8CAA8C;AAC9C,MAAM,UAAU,SAAS,CAA0B,GAAM;IACxD,OAAO,UAAU,CAAC,GAAG,CAAC;SACpB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;QAC3B,IAAI,SAAS,CAAM,GAAG,CAAC;YACtB,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAChB,OAAO,GAAQ,CAAC;IACjB,CAAC,EAAE,EAAO,CAAC,CAAA;AACb,CAAC;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,IAAI,GAAG,CAA0C,GAAM,EAAE,GAAG,IAAS,EAAc,EAAE;IACjG,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAEhD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/B,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YACxB,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACZ,CAAC,EAAE,EAAO,CAAC,CAAC;AACb,CAAC,CAAA;AAED,mDAAmD;AACnD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAuB,IAAS,EAAE,GAAM,EAAU,EAAE,CACxE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAE3B,sDAAsD;AACtD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAkB,GAAM,EAAE,GAAG,IAAS,EAAE,EAAE,CAC/D,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAM,CAAC;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,CAC3C,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;AAapB,MAAM,UAAU,UAAU,CAAC,GAAS;IACnC,IAAI,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,OAAO,CAAC,GAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AACpD,CAAC;AAED,uCAAuC;AACvC,UAAU,CAAC,YAAY,GAAG,UAAU,EAAkB,CAAC;AACvD,sDAAsD;AACtD,UAAU,CAAC,YAAY,GAAG,UAAU,EAAkB,CAAC;AACvD,sDAAsD;AACtD,UAAU,CAAC,YAAY,GAAG,UAAU,EAAkB,CAAC;AACvD,sDAAsD;AACtD,UAAU,CAAC,YAAY,GAAG,UAAU,EAAkB,CAAC"} \ No newline at end of file diff --git a/packages/shared/dist/pledge.class.d.ts b/packages/shared/dist/pledge.class.d.ts new file mode 100644 index 00000000..94277b08 --- /dev/null +++ b/packages/shared/dist/pledge.class.d.ts @@ -0,0 +1,64 @@ +declare module './type.library.js' { + interface TypeValueMap { + Pledge: { + type: 'Pledge'; + value: Pledge; + }; + } +} +/** + * Wrap a Promise's resolve/reject/finally methods for later fulfilment. + * with useful methods for tracking the state of the Promise, chaining fulfilment, etc. + ``` + new Pledge({tag: string, onResolve?: () => void, onReject?: () => void, onSettle?: () => void}) + new Pledge(tag?: string) + ``` + */ +export declare class Pledge { + #private; + static STATE: import("#core/shared/type.library.js").SecureObject<{ + readonly Pending: symbol; + readonly Resolved: symbol; + readonly Rejected: symbol; + }>; + /** initialize future Pledge instances */ + static init(arg?: Pledge.Constructor | string): Pledge.Status; + /** reset static defaults */ + static [Symbol.dispose](): void; + static get status(): Pledge.Status; + constructor(arg?: Pledge.Constructor | string); + get [Symbol.toStringTag](): string; + [Symbol.dispose](): void; + get status(): Pledge.Status; + get promise(): Promise; + get state(): string | undefined; + get isPending(): boolean; + get isResolved(): boolean; + get isRejected(): boolean; + get isSettled(): boolean; + toString(): string; + resolve(value: T): Promise; + reject(error: any): Promise; + then(fn: Function): void; +} +export declare namespace Pledge { + type Resolve = (val?: any) => any; + type Reject = (err: Error) => any; + type Settle = () => void; + type Constructor = { + tag?: string; + onResolve?: Pledge.Resolve | Pledge.Resolve[]; + onReject?: Pledge.Reject | Pledge.Reject[]; + onSettle?: Pledge.Settle | Pledge.Settle[]; + debug?: boolean | undefined; + catch?: boolean | undefined; + }; + interface Status { + tag?: string; + debug?: boolean | undefined; + catch?: boolean | undefined; + state: symbol; + settled?: T; + error?: Error; + } +} diff --git a/packages/shared/dist/pledge.class.js b/packages/shared/dist/pledge.class.js new file mode 100644 index 00000000..9cef06e3 --- /dev/null +++ b/packages/shared/dist/pledge.class.js @@ -0,0 +1,157 @@ +import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from "tslib"; +import { Logify } from '#core/shared/logify.class.js'; +import { asArray } from '#core/shared/coercion.library.js'; +import { sprintf } from '#core/shared/string.library.js'; +import { ifDefined } from '#core/shared/object.library.js'; +import { secure } from '#core/shared/utility.library.js'; +import { cleanify } from '#core/shared/serialize.library.js'; +import { Immutable } from '#core/shared/class.library.js'; +import { isEmpty, isObject } from '#core/shared/type.library.js'; +/** + * Wrap a Promise's resolve/reject/finally methods for later fulfilment. + * with useful methods for tracking the state of the Promise, chaining fulfilment, etc. + ``` + new Pledge({tag: string, onResolve?: () => void, onReject?: () => void, onSettle?: () => void}) + new Pledge(tag?: string) + ``` + */ +let Pledge = (() => { + var _Pledge_static; + let _classDecorators = [Immutable]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + var Pledge = class { + static { _classThis = this; } + static { __setFunctionName(this, "Pledge"); } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + Pledge = _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + } + #pledge; + #status = {}; + #dbg; + static { + _Pledge_static = { value: {} }; + } + static STATE = secure({ + Pending: Symbol('pending'), + Resolved: Symbol('resolved'), + Rejected: Symbol('rejected') + }); + /** initialize future Pledge instances */ + static init(arg) { + if (isObject(arg)) { + if (isEmpty(arg)) + __classPrivateFieldSet(Pledge, _classThis, {}, "f", _Pledge_static); // reset static values + Object.assign(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }), ifDefined({ onResolve: arg.onResolve, onReject: arg.onReject, onSettle: arg.onSettle, })); + } + else { + Object.assign(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static), ifDefined({ tag: arg, })); + } + if (__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).debug) + console.log('Pledge: ', __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static)); // debug + return Pledge.status; + } + /** reset static defaults */ + static [Symbol.dispose]() { Pledge.init({}); } + static get status() { + return __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static); + } + /** use catch:boolean to determine whether to throw or return */ + #catch(...msg) { + if (this.status.catch) { + this.#dbg.warn(...msg); // catch, but warn {error} + return; + } + this.#dbg.error(...msg); // assume {error} + throw new Error(sprintf('pledge: ', ...msg)); + } + constructor(arg) { + this.#pledge = Promise.withResolvers(); + this.#status = { state: Pledge.STATE.Pending, ...__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static) }; + if (isObject(arg)) { + this.#dbg = new Logify({ debug: arg.debug, catch: arg.catch }); + Object.assign(this.#status, ifDefined({ tag: __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).tag, debug: __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).debug, catch: __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).catch }), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, })); + const onResolve = asArray(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).onResolve).concat(asArray(arg.onResolve)); + const onReject = asArray(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).onReject).concat(asArray(arg.onReject)); + const onSettle = asArray(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).onSettle).concat(asArray(arg.onSettle)); + if (onResolve.length) + this.#pledge.promise.then(val => onResolve.forEach(cb => cb(val))); + if (onReject.length) + this.#pledge.promise.catch(err => onReject.forEach(cb => cb(err))); + if (onSettle.length) + this.#pledge.promise.finally(() => onSettle.forEach(cb => cb())); + if (this.#status.catch) + this.#pledge.promise.catch(err => this.#catch(this.#status, err)); + } + else { + this.#dbg = new Logify(); + Object.assign(this.#status, ifDefined({ tag: arg ?? __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).tag, })); + } + this.#pledge.promise.catch(() => { }); // global catch-all to prevent unhandled rejections + Object.freeze(this); // make this instance immutable + } + get [Symbol.toStringTag]() { + return 'Pledge'; + } + [Symbol.dispose]() { + if (this.isPending) + this.reject(new Error(`Pledge disposed`)); // discard pending Pledge (to notify wait-ers) + } + get status() { + return cleanify(this.#status); + } + get promise() { + return this.#pledge.promise; + } + get state() { + return this.#status.state.description; + } + get isPending() { + return this.#status.state === Pledge.STATE.Pending; + } + get isResolved() { + return this.#status.state === Pledge.STATE.Resolved; + } + get isRejected() { + return this.#status.state === Pledge.STATE.Rejected; + } + get isSettled() { + return this.#status.state !== Pledge.STATE.Pending; + } + toString() { + return JSON.stringify(this.status); + } + resolve(value) { + if (this.isPending) { + this.#status.settled = value; + this.#status.state = Pledge.STATE.Resolved; + this.#pledge.resolve(value); // resolve, then trigger any Pledge.onResolve, then Pledge.onSettle + } + else + this.#dbg.warn(this.#status, `Pledge was already ${this.state}`); + return this.#pledge.promise; + } + reject(error) { + if (this.isPending) { + this.#status.error = error; + this.#status.state = Pledge.STATE.Rejected; + this.#pledge.reject(error); // reject, then trigger any Pledge.onReject, then Pledge.onSettle + } + else + this.#dbg.warn(this.#status, `Pledge was already ${this.state}`); + return this.#pledge.promise; + } + then(fn) { + } + static { + __runInitializers(_classThis, _classExtraInitializers); + } + }; + return Pledge = _classThis; +})(); +export { Pledge }; +//# sourceMappingURL=pledge.class.js.map \ No newline at end of file diff --git a/packages/shared/dist/pledge.class.js.map b/packages/shared/dist/pledge.class.js.map new file mode 100644 index 00000000..f27b5fc7 --- /dev/null +++ b/packages/shared/dist/pledge.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pledge.class.js","sourceRoot":"","sources":["../src/pledge.class.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAQjE;;;;;;;GAOG;IAEU,MAAM;;4BADlB,SAAS;;;;;;;;;YACV,6KA8IC;;;;QA7IA,OAAO,CAA0B;QACjC,OAAO,GAAG,EAAsB,CAAC;QACjC,IAAI,CAAS;;YACN,0BAAU,EAAwB,EAA3B,CAA4B;;QAE1C,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;YACrB,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;YAC1B,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;YAC5B,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;SAC5B,CAAC,CAAA;QAEF,yCAAyC;QACzC,MAAM,CAAC,IAAI,CAAC,GAAiC;YAC5C,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,OAAO,CAAC,GAAG,CAAC;oBACf,uBAAA,MAAM,cAAW,EAAE,sBAAA,CAAC,CAAgB,sBAAsB;gBAE3D,MAAM,CAAC,MAAM,CAAC,uBAAA,MAAM,kCAAQ,EAC3B,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,EAChE,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CACxF,CAAA;YACF,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,MAAM,CAAC,uBAAA,MAAM,kCAAQ,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACzD,CAAC;YAED,IAAI,uBAAA,MAAM,kCAAQ,CAAC,KAAK;gBACvB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,uBAAA,MAAM,kCAAQ,CAAC,CAAC,CAAO,QAAQ;YAExD,OAAO,MAAM,CAAC,MAAM,CAAC;QACtB,CAAC;QAED,4BAA4B;QAC5B,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC;QAE7C,MAAM,KAAK,MAAM;YAChB,OAAO,uBAAA,MAAM,kCAAwC,CAAC;QACvD,CAAC;QAED,iEAAiE;QACjE,MAAM,CAAC,GAAG,GAAU;YACnB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAgB,0BAA0B;gBACjE,OAAO;YACR,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAgB,iBAAiB;YACzD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,YAAY,GAAiC;YAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,uBAAA,MAAM,kCAAQ,EAAE,CAAC;YAElE,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EACzB,SAAS,CAAC,EAAE,GAAG,EAAE,uBAAA,MAAM,kCAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,uBAAA,MAAM,kCAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,uBAAA,MAAM,kCAAQ,CAAC,KAAK,EAAE,CAAC,EAChG,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAChE,CAAA;gBAED,MAAM,SAAS,GAAG,OAAO,CAAC,uBAAA,MAAM,kCAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;gBACnF,MAAM,QAAQ,GAAG,OAAO,CAAC,uBAAA,MAAM,kCAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAChF,MAAM,QAAQ,GAAG,OAAO,CAAC,uBAAA,MAAM,kCAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAEhF,IAAI,SAAS,CAAC,MAAM;oBAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzF,IAAI,QAAQ,CAAC,MAAM;oBAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACxF,IAAI,QAAQ,CAAC,MAAM;oBAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAEtF,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;oBACrB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,uBAAA,MAAM,kCAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAU,mDAAmD;YACnG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAkB,+BAA+B;QACtE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACvB,OAAO,QAAQ,CAAA;QAChB,CAAC;QAED,CAAC,MAAM,CAAC,OAAO,CAAC;YACf,IAAI,IAAI,CAAC,SAAS;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAM,8CAA8C;QAChG,CAAC;QAED,IAAI,MAAM;YACT,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,OAAO;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7B,CAAC;QAED,IAAI,KAAK;YACR,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;QACvC,CAAC;QAED,IAAI,SAAS;YACZ,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QACpD,CAAC;QACD,IAAI,UAAU;YACb,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrD,CAAC;QACD,IAAI,UAAU;YACb,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrD,CAAC;QACD,IAAI,SAAS;YACZ,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QACpD,CAAC;QAED,QAAQ;YACP,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,CAAC,KAAQ;YACf,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC3C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAa,mEAAmE;YAC7G,CAAC;;gBACI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAEtE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7B,CAAC;QAED,MAAM,CAAC,KAAU;YAChB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAc,iEAAiE;YAC3G,CAAC;;gBACI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAEtE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,EAAY;QAEjB,CAAC;;YA7IW,uDAAM;;;;;SAAN,MAAM"} \ No newline at end of file diff --git a/packages/shared/dist/prototype.library.d.ts b/packages/shared/dist/prototype.library.d.ts new file mode 100644 index 00000000..4629dfb9 --- /dev/null +++ b/packages/shared/dist/prototype.library.d.ts @@ -0,0 +1,33 @@ +import { type SortBy } from '#core/shared/array.library.js'; +import type { Property } from '#core/shared/type.library.js'; +/** + * extend an Object's prototype to include new method, if no clash + */ +export declare const patch: >(proto: T, property: string, method: Function) => void; +declare global { + interface String { + /** remove redundant spaces to a new string */ trimAll(pat?: RegExp): string; + /** upper-case first letter of a word */ toProperCase(): string; + } +} +type GroupFn> = (value: T, index?: number) => PropertyKey; +type SortFn = (left: T, right: T) => -1 | 0 | 1; +declare global { + interface Array { + /** reduce Array to a keyed Object[] */ keyedBy(...keys: (keyof T)[]): Record; + /** reduce Array to a keyed Object[], mapped */ keyedBy>(grpfn: GroupFn): Record; + /** reduce Array to a keyed single-Object */ lookupBy(...keys: (keyof T)[]): Record; + /** reduce Array to a keyed single-Object, mapped */ lookupBy>(grpfn: GroupFn): Record; + /** return ordered Array */ orderBy(...keys: (PropertyKey | SortBy)[]): T[]; + /** return ordered Array, mapped */ orderBy(mapfn: SortFn): V[]; + /** return sorted Array */ sortBy(...keys: (PropertyKey | SortBy)[]): T[]; + /** return ordered Array, mapped */ sortBy(mapfn: SortFn): V[]; + /** return new Array with no repeated elements */ distinct(): T[]; + /** return mapped Array with no repeated elements */ distinct(mapfn: (value: T, index: number, array: T[]) => S, thisArg?: any): S[]; + /** clear down an Array */ clear(): T[]; + /** return cartesian-product of Array of Arrays */ cartesian(): T; + /** return cartesian-product of Array of Arrays */ cartesian(...args: T[][]): T[]; + /** tap into an Array */ tap(tapfn: (value: T[]) => void, thisArg?: any): T[]; + } +} +export {}; diff --git a/packages/shared/dist/prototype.library.js b/packages/shared/dist/prototype.library.js new file mode 100644 index 00000000..591255fc --- /dev/null +++ b/packages/shared/dist/prototype.library.js @@ -0,0 +1,53 @@ +import { trimAll, toProperCase } from '#core/shared/string.library.js'; +import { byKey, byLkp, sortKey } from '#core/shared/array.library.js'; +import { asArray } from '#core/shared/coercion.library.js'; +// Prototype extensions +// Remember to define any imports as a Function Declaration (not a Function Expression) +// so that they are 'hoisted' prior to extending a prototype +/** + * extend an Object's prototype to include new method, if no clash + */ +export const patch = (proto, property, method) => { + if (Object.hasOwn(proto.prototype, property)) { // if already defined, + if (trimAll(method.toString()) !== trimAll(proto.prototype?.[property]?.toString())) + console.warn(`${proto.name}.${property} already defined`); // show warning if different method definition + } + else { + Object.defineProperty(proto.prototype, property, { + configurable: false, + enumerable: false, + writable: false, + value: method, + }); + } +}; +patch(String, 'trimAll', function (pat) { return trimAll(this, pat); }); +patch(String, 'toProperCase', function () { return toProperCase(this); }); +function sorted(...keys) { return sortKey(this, ...keys); } +patch(Array, 'orderBy', sorted); // order array by named keys +patch(Array, 'sortBy', sorted); // sort array by named keys +function keyed(...keys) { return byKey(this, ...keys); } +function lookup(...keys) { return byLkp(this, ...keys); } +patch(Array, 'keyedBy', keyed); // reduce array by named keys +patch(Array, 'lookupBy', lookup); // reduce array by named keys, only one entry per key +patch(Array, 'tap', function (fn) { + fn(this); // run an arbitrary function + return this; // then return the original array +}); +patch(Array, 'clear', function () { + this.fill(null).length = 0; // wipe the contents, then set the 'length' to zero + return this; +}); +patch(Array, 'distinct', function (mapfn) { + return mapfn + ? this.map(mapfn).distinct() // run the mapping selector, then recurse + : Array.from(new Set(this)); // eliminate duplicates +}); +patch(Array, 'cartesian', function (...args) { + const [a, b = [], ...c] = args.length === 0 ? this : args; + const cartFn = (a, b) => asArray([]).concat(...a.map(d => b.map(e => asArray([]).concat(d, e)))); + return b.length + ? this.cartesian(cartFn(a, b), ...c) // run the cartFn function, then recurse + : asArray(a || []); // return the collated result +}); +//# sourceMappingURL=prototype.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/prototype.library.js.map b/packages/shared/dist/prototype.library.js.map new file mode 100644 index 00000000..5f68ccab --- /dev/null +++ b/packages/shared/dist/prototype.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"prototype.library.js","sourceRoot":"","sources":["../src/prototype.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/proxy.library.d.ts b/packages/shared/dist/proxy.library.d.ts new file mode 100644 index 00000000..22d545b6 --- /dev/null +++ b/packages/shared/dist/proxy.library.d.ts @@ -0,0 +1,2 @@ +/** Stealth Proxy pattern to allow for iteration and logging over a Frozen object */ +export declare function getProxy(target: T): T; diff --git a/packages/shared/dist/proxy.library.js b/packages/shared/dist/proxy.library.js new file mode 100644 index 00000000..0ff2180d --- /dev/null +++ b/packages/shared/dist/proxy.library.js @@ -0,0 +1,40 @@ +import { $Target, allObject } from '#core/shared/reflection.library.js'; +import { secure } from '#core/shared/utility.library.js'; +import { isFunction } from '#core/shared/type.library.js'; +/** Node.js custom inspection symbol */ +const $Inspect = Symbol.for('nodejs.util.inspect.custom'); +/** Stealth Proxy pattern to allow for iteration and logging over a Frozen object */ +export function getProxy(target) { + secure(target); + const tgt = target[$Target] ?? target; + let cachedJSON; + return new Proxy(target, { + isExtensible: (t) => Reflect.isExtensible(t), + preventExtensions: (t) => Reflect.preventExtensions(t), + getOwnPropertyDescriptor: (_, key) => Reflect.getOwnPropertyDescriptor(tgt, key), + getPrototypeOf: () => Reflect.getPrototypeOf(tgt), + deleteProperty: (_, key) => Reflect.deleteProperty(tgt, key), + ownKeys: () => Reflect.ownKeys(tgt), + has: (_, key) => Reflect.has(tgt, key), + set: (_, key, val) => Reflect.set(tgt, key, val), + get: (_, key, receiver) => { + if (key === $Target) + return tgt; // found the 'stop' marker + if (key === $Inspect || key === 'toJSON') { // two special properties require virtual closures + const own = Object.getOwnPropertyDescriptor(tgt, key); + if (own && isFunction(own.value)) // if object already has its own toJSON, return + return own.value; + if (!cachedJSON) { // otherwise, create a virtual closure + const result = allObject(receiver); // resolve full-object representation + cachedJSON = () => result; // memoize for subsequent calls + } + return cachedJSON; // return the memoized closure + } + const val = Reflect.get(tgt, key, receiver); + return (typeof val === 'function') // if the value is a function + ? val.bind(tgt) // bind it to the target + : val; // else return the value + }, + }); +} +//# sourceMappingURL=proxy.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/proxy.library.js.map b/packages/shared/dist/proxy.library.js.map new file mode 100644 index 00000000..474ae4a8 --- /dev/null +++ b/packages/shared/dist/proxy.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"proxy.library.js","sourceRoot":"","sources":["../src/proxy.library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,uCAAuC;AACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAE1D,oFAAoF;AACpF,MAAM,UAAU,QAAQ,CAAmB,MAAS;IACnD,MAAM,CAAC,MAAM,CAAC,CAAC;IACf,MAAM,GAAG,GAAI,MAAc,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC;IAC/C,IAAI,UAAe,CAAC;IAEpB,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACxB,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5C,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACtD,wBAAwB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC;QAChF,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;QACjD,cAAc,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC;QAC5D,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;QACnC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;QACtC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAChD,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;YACzB,IAAI,GAAG,KAAK,OAAO;gBAClB,OAAO,GAAG,CAAC,CAAsB,0BAA0B;YAE5D,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC,CAAW,kDAAkD;gBACvG,MAAM,GAAG,GAAG,MAAM,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACtD,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAoB,+CAA+C;oBACjG,OAAO,GAAG,CAAC,KAAK,CAAC;gBAEnB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAkC,sCAAsC;oBACxF,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAY,qCAAqC;oBACpF,UAAU,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAwB,+BAA+B;gBACnF,CAAC;gBAED,OAAO,UAAU,CAAC,CAAkC,8BAA8B;YACnF,CAAC;YAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC5C,OAAO,CAAC,OAAO,GAAG,KAAK,UAAU,CAAC,CAAoB,6BAA6B;gBAClF,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAqC,wBAAwB;gBAC5E,CAAC,CAAC,GAAG,CAAC,CAA8C,wBAAwB;QAC9E,CAAC;KACD,CAAM,CAAA;AACR,CAAC"} \ No newline at end of file diff --git a/packages/shared/dist/reflection.library.d.ts b/packages/shared/dist/reflection.library.d.ts new file mode 100644 index 00000000..9c375741 --- /dev/null +++ b/packages/shared/dist/reflection.library.d.ts @@ -0,0 +1,80 @@ +import type { Obj, KeyOf, ValueOf, EntryOf, Primitives } from '#core/shared/type.library.js'; +/** property marker used to unwrap proxies in ownEntries() */ +export declare const $Target: unique symbol; +/** mutate Object | Array by excluding values with specified primitive 'types' */ +export declare function exclude(obj: T, ...types: (Primitives | Lowercase)[]): T; +/** mutate Object | Array reference with properties removed */ +export declare function omit(obj: T): T; +export declare function omit(obj: T, ...keys: PropertyKey[]): T; +/** remove all ownKeys from an Object | Array */ +export declare function purge(obj: T): T; +/** reset Object */ +export declare function reset(orig: T, obj?: T): T & { + [x: number]: any; + length?: any; + toString?: (() => string) | (() => string) | undefined; + toLocaleString?: (() => string) | { + (): string; + (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; + } | undefined; + pop?: any; + push?: any; + concat?: any; + join?: any; + reverse?: any; + shift?: any; + slice?: any; + sort?: any; + splice?: any; + unshift?: any; + indexOf?: any; + lastIndexOf?: any; + every?: any; + some?: any; + forEach?: any; + map?: any; + filter?: any; + reduce?: any; + reduceRight?: any; + find?: any; + findIndex?: any; + fill?: any; + copyWithin?: any; + entries?: any; + keys?: any; + values?: any; + includes?: any; + flatMap?: any; + flat?: any; + at?: any; + findLast?: any; + findLastIndex?: any; + toReversed?: any; + toSorted?: any; + toSpliced?: any; + with?: any; + keyedBy?: any; + lookupBy?: any; + orderBy?: any; + sortBy?: any; + distinct?: any; + clear?: any; + cartesian?: any; + tap?: any; +}; +/** array of all enumerable PropertyKeys */ +export declare function ownKeys(json: T): KeyOf[]; +/** array of all enumerable object values */ +export declare function ownValues(json: T): ValueOf[]; +/** tuple of enumerable entries with string | symbol keys */ +export declare function ownEntries(json: T, all?: boolean): EntryOf[]; +/** return an Object containing all 'own' and 'inherited' enumerable properties */ +export declare function allObject(json: T): { + [k: string]: ValueOf; +}; +/** get a string-array of 'getter' names for an object */ +export declare const getAccessors: (obj?: any) => (string | symbol)[]; +/** get a string-array of 'setter' names for an object */ +export declare const setAccessors: (obj?: any) => (string | symbol)[]; +/** copy all Own properties (including getters / setters) to a new object */ +export declare const copyObject: (target: T, source: T) => T; diff --git a/packages/shared/dist/reflection.library.js b/packages/shared/dist/reflection.library.js new file mode 100644 index 00000000..ab2d1ef2 --- /dev/null +++ b/packages/shared/dist/reflection.library.js @@ -0,0 +1,110 @@ +import { asType, getType, isEmpty, isFunction, isPrimitive } from '#core/shared/type.library.js'; +/** property marker used to unwrap proxies in ownEntries() */ +export const $Target = Symbol.for('$Target'); +/** mutate Object | Array by excluding values with specified primitive 'types' */ +export function exclude(obj, ...types) { + const exclusions = types + .map(item => item.toLowerCase()) // cast Primitives as Lowercase to aid in matching + .distinct(); + if (obj && typeof obj === 'object') { // only works on Objects and Arrays + const keys = []; + ownEntries(obj) + .forEach(([key, value]) => { + const type = getType(value); + if (['Object', 'Array'].includes(type)) // recurse into object + exclude(value, ...exclusions); + if (isPrimitive(value) && exclusions.includes(type.toLowerCase())) + keys.push(key); + }); + if (!isEmpty(keys)) // if any values to be excluded + omit(obj, ...keys); + } + return obj; // return Object reference, even though Object has been mutated +} +export function omit(obj, ...keys) { + const { type, value } = asType(obj); + switch (type) { + case 'Array': + if (isEmpty(keys)) { + value.clear(); // clear entire Array + break; + } + keys + .sort() + .reverse() // remove from end-to-start to preserve indexes + .forEach(key => value.splice(Number(key), 1)); // remove Array index + break; + case 'Object': + (isEmpty(keys) ? ownKeys(value) : keys) // if no {keys}, assume all ownKeys + .forEach(key => Reflect.deleteProperty(value, key)); + } + return value; // return Object reference, even though Object has been mutated +} +/** remove all ownKeys from an Object | Array */ +export function purge(obj) { + return omit(obj); +} +/** reset Object */ +export function reset(orig, obj) { + return Object.assign(purge(orig), { ...obj }); +} +// These functions are to preserve the typescript 'type' of an object's keys & values +// and will include both string and symbol keys +/** array of all enumerable PropertyKeys */ +export function ownKeys(json) { + return ownEntries(json).map(([key]) => key); +} +/** array of all enumerable object values */ +export function ownValues(json) { + return ownEntries(json).map(([_, value]) => value); +} +/** tuple of enumerable entries with string | symbol keys */ +export function ownEntries(json, all = false) { + if (!json || typeof json !== 'object') + return []; + const getOwn = (obj) => { + const tgt = obj[$Target] ?? obj; // unwrap if it's a proxy + return Reflect.ownKeys(tgt) + .filter(key => Object.getOwnPropertyDescriptor(tgt, key)?.enumerable) + .map(key => [key, tgt[key]]); + }; + if (!all) + return getOwn(json); + // all=true: collect per-level bottom-up, reverse to top-down, dedup via Map + // Map preserves first-insertion position but allows value update (own key shadows ancestor) + const levels = []; + const limit = 50; // prevent infinite loops (increased from 10) + let depth = 0; + let proto = json; + do { + const t = proto[$Target] ?? proto; // CRITICAL: unwrap before checking marker to avoid trap recursion + const lvl = getOwn(proto); + if (lvl.length) + levels.push(lvl); + proto = Object.getPrototypeOf(t); + } while (proto && proto !== Object.prototype && ++depth < limit); + return [...new Map(levels.reverse().flat()).entries()]; +} +/** return an Object containing all 'own' and 'inherited' enumerable properties */ +export function allObject(json) { + return Object.fromEntries(ownEntries(json, true)); +} +/** get a string-array of 'getter' names for an object */ +export const getAccessors = (obj = {}) => { + return ownAccessors(obj, 'get'); +}; +/** get a string-array of 'setter' names for an object */ +export const setAccessors = (obj = {}) => { + return ownAccessors(obj, 'set'); +}; +const ownAccessors = (obj = {}, type) => { + const accessors = Object.getOwnPropertyDescriptors(obj.prototype || Object.getPrototypeOf(obj)); + return ownEntries(accessors) + .filter(([_, descriptor]) => isFunction(descriptor[type])) + .map(([key, _]) => key); +}; +/** copy all Own properties (including getters / setters) to a new object */ +export const copyObject = (target, source) => { + return Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); +}; +//# sourceMappingURL=reflection.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/reflection.library.js.map b/packages/shared/dist/reflection.library.js.map new file mode 100644 index 00000000..0f2676d6 --- /dev/null +++ b/packages/shared/dist/reflection.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reflection.library.js","sourceRoot":"","sources":["../src/reflection.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/serialize.library.d.ts b/packages/shared/dist/serialize.library.d.ts new file mode 100644 index 00000000..8438f1b6 --- /dev/null +++ b/packages/shared/dist/serialize.library.d.ts @@ -0,0 +1,25 @@ +/** registry of registered classes */ +export declare const Registry: Map; +/** make a deep-copy, using standard browser or JSON functions */ +export declare function clone(obj: T, opts?: { + transfer: any[]; +}): T; +/** return a copy. remove unsupported values (e.g. \, function) */ +export declare function cleanify(obj: T): T; +/** deep-copy an Object, and optionally replace \ fields with a Sentinel function call */ +export declare function cloneify(obj: T, sentinel?: Function): T; +/** + * For items which are not currently serializable via standard JSON.stringify (Undefined, BigInt, Set, Map, Symbol, etc.) + * this creates a stringified, single key:value Object to represent the value; for example '{ "$BigInt": 123 }' + * + * Drawbacks: + * no support Function / WeakMap / WeakSet / WeakRef + * limited support for user-defined Classes (must be specifically registered with @Serialize() decorator) + */ +/** + * serialize Objects for string-safe stashing in WebStorage, Cache, etc + * uses JSON.stringify where available, else returns stringified single key:value Object '{[$type]: value}' + */ +export declare function stringify(obj: T): string; +/** rebuild an Object from its stringified representation */ +export declare function objectify(str: any, sentinel?: Function): T; diff --git a/packages/shared/dist/serialize.library.js b/packages/shared/dist/serialize.library.js new file mode 100644 index 00000000..01ec117e --- /dev/null +++ b/packages/shared/dist/serialize.library.js @@ -0,0 +1,267 @@ +import { curry } from '#core/shared/function.library.js'; +import { ownKeys, ownValues, ownEntries } from '#core/shared/reflection.library.js'; +import { isType, asType, isEmpty, isDefined, isUndefined, isNullish, isString, isObject, isArray, isFunction, isSymbolFor, isSymbol } from '#core/shared/type.library.js'; +/** registry of registered classes */ +// DO NOT EDIT THIS VALUE: used by decorator.library.ts +export const Registry = new Map(); +// be aware that 'structuredClone' preserves \ values... +// and JSON.stringify() does not +/** make a deep-copy, using standard browser or JSON functions */ +export function clone(obj, opts) { + try { + return globalThis.structuredClone(obj, opts); + } + catch { + return cleanify(obj); // fallback to JSON functions + } +} +/** return a copy. remove unsupported values (e.g. \, function) */ +export function cleanify(obj) { + try { + return JSON.parse(JSON.stringify(obj)); // run any toString() methods + } + catch (error) { + console.warn('Could not clean object: ', obj); + return { ...obj }; + } +} +/** deep-copy an Object, and optionally replace \ fields with a Sentinel function call */ +export function cloneify(obj, sentinel) { + try { + return objectify(stringify(obj), sentinel); + } + catch (error) { + console.warn('Could not cloneify object: ', obj); + console.warn('stack: ', error.stack); + return obj; + } +} +function replacer(key, obj) { return isEmpty(key) ? obj : stringize(obj); } +function reviver(_key, val) { return decode(val); } +// safe-characters [sp " ; < > [ ] ^ { | }] +const safeList = ['20', '22', '3B', '3C', '3E', '5B', '5D', '5E', '7B', '7C', '7D']; +/** encode control characters, then replace a safe-subset back to text-string */ +function encode(val) { + let enc = encodeURI(val); + if (enc.includes('%')) { // if an encoded URI might be in string + safeList.forEach(code => { + const uri = '%' + code; + const reg = new RegExp(uri, 'g'); + enc = enc.replace(reg, decodeURI(uri)); + }); + } + return enc; +} +/** decode control characters */ +function decode(val) { + if (isString(val)) { + try { + return decodeURI(val); // might fail if badly encoded '%' + } + catch (error) { + // console.warn(`decodeURI: ${(error as Error).message} -> ${val}`); + } + } + return val; // return original value +} +/** check type can be stringify'd */ +function isStringable(val) { + return !isType(val, 'Function', 'AsyncFunction', 'WeakMap', 'WeakSet', 'WeakRef'); +} +/** string representation of a single key:value Object */ +function oneKey(type, value) { + return `{"$${type}":${value}}`; +} +/** Symbols in an Object-key will need special treatment */ +function fromSymbol(key) { + return stringize(isSymbol(key) // @@(name) for global, @(name) for local symbols + ? `${isSymbolFor(key) ? '@' : ''}@(${key.description ?? ''})` + : key); +} +const symKey = /^@(@)?\(([^\)]*)\)$/; // pattern to match a stringify'd Symbol +/** reconstruct a Symbol from a string-representation of a key */ +function toSymbol(value) { + const [pat, keyFor, desc] = value.toString().match(symKey) || [null, undefined, undefined]; + switch (true) { + case isSymbol(value): // already a Symbol + case isNullish(pat): // incorrectly encoded Symbol + case isDefined(keyFor) && isUndefined(desc): // incorrectly encoded global Symbol + return value; + case isDefined(keyFor): // global Symbol + return Symbol.for(desc); + case isUndefined(keyFor): // local Symbol + default: + return Symbol(desc); + } +} +/** + * For items which are not currently serializable via standard JSON.stringify (Undefined, BigInt, Set, Map, Symbol, etc.) + * this creates a stringified, single key:value Object to represent the value; for example '{ "$BigInt": 123 }' + * + * Drawbacks: + * no support Function / WeakMap / WeakSet / WeakRef + * limited support for user-defined Classes (must be specifically registered with @Serialize() decorator) + */ +/** + * serialize Objects for string-safe stashing in WebStorage, Cache, etc + * uses JSON.stringify where available, else returns stringified single key:value Object '{[$type]: value}' + */ +export function stringify(obj) { + return stringize(obj, false); +} +/** + * internal function to process stringify-requests (and hide second parameter) + * where first argument is the object to stringify, and + * the second argument is a boolean to indicate if function is being called recursively + */ +function stringize(obj, recurse = true) { + const arg = asType(obj); + const one = curry(oneKey)(arg.type); // curry the oneKey() function + switch (arg.type) { + case 'String': + if (!recurse) { // if a top-level string (e.g. 'true' or '1234') + recurse = arg.value === 'true' // ensure true|false|null|1234 are quoted by JSON.stringify + || arg.value === 'false' // so they will be correctly identified during objectify() + || arg.value === 'null' + || parseFloat(arg.value).toString() === arg.value; + } + return recurse + ? JSON.stringify(encode(arg.value)) // encode string for safe-storage + : encode(arg.value); // dont JSON.stringify a top-level string + case 'Boolean': + case 'Null': + case 'Number': + return JSON.stringify(arg.value); // JSON.stringify will correctly handle these + case 'Void': + case 'Undefined': + return one(JSON.stringify('void')); // preserve 'undefined' values + case 'BigInt': + return one(arg.value.toString()); // even though BigInt has a toString method, it is not supported in JSON.stringify + case 'Object': + const obj = ownEntries(arg.value) + .filter(([, val]) => isStringable(val)) + .map(([key, val]) => `${fromSymbol(key)}: ${stringize(val)}`) + .join(','); + return `{${obj}}`; + case 'Array': + const arr = arg.value + .filter(val => isStringable(val)) + .map(val => stringize(val)) + .join(','); + return `[${arr}]`; + case 'Map': + const map = Array.from(arg.value.entries()) + .filter(([, val]) => isStringable(val)) + .map(([key, val]) => `[${stringize(key)}, ${stringize(val)}]`) + .join(','); + return one(`[${map}]`); + case 'Set': + const set = Array.from(arg.value.values()) + .filter(val => isStringable(val)) + .map(val => stringize(val)) + .join(','); + return one(`[${set}]`); + case 'Symbol': + return one(fromSymbol(arg.value)); + case 'RegExp': + return one(stringize({ source: arg.value.source, flags: arg.value.flags })); + case 'Class': + default: + const value = arg.value; + switch (true) { + case !isStringable(value): // Object is not stringify-able + return undefined; + case isFunction(value.toJSON): // Object has its own toJSON method + return one(stringize(value.toJSON())); + case isFunction(value.toString): // Object has its own toString method + const str = value.toString(); + return one(str.includes('"') // TODO: improve detection of JSON vs non-JSON strings + ? str + : JSON.stringify(str)); + case isFunction(value.valueOf): // Object has its own valueOf method + return one(JSON.stringify(value.valueOf())); + default: // else standard stringify + return one(JSON.stringify(value, replacer)); + } + } +} +/** rebuild an Object from its stringified representation */ +export function objectify(str, sentinel) { + if (!isString(str)) + return str; // skip parsing + let parse; + try { + parse = JSON.parse(str, reviver); // catch if cannot parse + } + catch (error) { + if (str.startsWith('"') && str.endsWith('"')) { + console.warn(`objectify.parse: -> ${str}, ${error.message}`); + return str; // bail-out + } + else + return objectify(`"${str}"`, sentinel); // have another try, quoted + } + switch (true) { + case str.startsWith('{') && str.endsWith('}'): // looks like Object + case str.startsWith('[') && str.endsWith(']'): // looks like Array + return traverse(parse, sentinel); // recurse into object + default: + return parse; + } +} +/** recurse into Object / Array, looking for special single key:value Objects */ +function traverse(obj, sentinel) { + if (isObject(obj)) { + return typeify(ownEntries(obj) + .reduce((acc, [key, val]) => Object.assign(acc, { [toSymbol(key)]: typeify(traverse(val, sentinel)) }), {}), sentinel); + } + if (isArray(obj)) { + return ownValues(obj) + .map(val => typeify(traverse(val, sentinel))); + } + return obj; +} +/** rebuild an Object from its single key:value representation */ +function typeify(json, sentinel) { + if (!isObject(json) || ownKeys(json).length !== 1) + return json; // only JSON Objects, with a single key:value pair + const [$type, value] = ownEntries(json)[0]; + if (!String($type).startsWith('$')) + return json; // not a serialized single key:value Object + const type = $type.substring(1); // remove '$' prefix + switch (type) { + case 'String': + case 'Boolean': + case 'Object': + case 'Array': + return value; // these types are already handled by traverse() + case 'Number': + return Number(value); + case 'BigInt': + return BigInt(value); + case 'Null': + return null; + case 'Undefined': + case 'Empty': + case 'Void': + return sentinel?.(); // run Sentinel function to handle undefined values + case 'Date': + return new Date(value); + case 'RegExp': + return new RegExp(value.source, value.flags); + case 'Symbol': + return toSymbol(value); + case 'Map': + return new Map(value); + case 'Set': + return new Set(value); + default: + const cls = Registry.get($type); // lookup registered Class + if (!cls) { + console.warn(`objectify: dont know how to deserialize '${type}'`); + return json; // return original JSON object + } + return Reflect.construct(cls, [value]); // create new Class instance + } +} +//# sourceMappingURL=serialize.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/serialize.library.js.map b/packages/shared/dist/serialize.library.js.map new file mode 100644 index 00000000..7d6d6cfb --- /dev/null +++ b/packages/shared/dist/serialize.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"serialize.library.js","sourceRoot":"","sources":["../src/serialize.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/storage.library.d.ts b/packages/shared/dist/storage.library.d.ts new file mode 100644 index 00000000..0f9865e3 --- /dev/null +++ b/packages/shared/dist/storage.library.d.ts @@ -0,0 +1,8 @@ +/** select local | session storage */ +export declare function selStorage(store?: 'local' | 'session'): Storage; +/** get storage */ +export declare function getStorage(): T; +export declare function getStorage(key: string): T | undefined; +export declare function getStorage(key: string | undefined, dflt?: T): T; +/** set / delete storage */ +export declare function setStorage(key: string, val?: T): void; diff --git a/packages/shared/dist/storage.library.js b/packages/shared/dist/storage.library.js new file mode 100644 index 00000000..05965868 --- /dev/null +++ b/packages/shared/dist/storage.library.js @@ -0,0 +1,58 @@ +import { objectify, stringify } from '#core/shared/serialize.library.js'; +import { CONTEXT, getContext } from '#core/shared/utility.library.js'; +import { isDefined, isUndefined, isString } from '#core/shared/type.library.js'; +const context = getContext(); +let storage = context.type === CONTEXT.Browser + ? context.global?.localStorage //as globalThis.Storage // default to localStorage in a browser + : undefined; +/** select local | session storage */ +export function selStorage(store = 'local') { + const name = (store + 'Storage'); + return storage = globalThis[name]; // return whichever was selected. +} +export function getStorage(key, dflt) { + let store; + if (isUndefined(key)) + return dflt ?? {}; + switch (context.type) { + case CONTEXT.Browser: + store = storage.getItem(key); + break; + case CONTEXT.NodeJS: + store = context.global.process.env[key]; + break; + case CONTEXT.GoogleAppsScript: + store = context.global.PropertiesService?.getUserProperties().getProperty(key); + break; + default: + throw new Error(`Cannot determine Javascript context: ${context.type}`); + } + return isString(store) + ? objectify(store) // rebuild object from its stringified representation + : dflt; +} +/** set / delete storage */ +export function setStorage(key, val) { + const stash = isDefined(val) ? stringify(val) : undefined; + const set = isDefined(stash); + switch (context.type) { + case CONTEXT.Browser: + set + ? storage.setItem(key, stash) + : storage.removeItem(key); + break; + case CONTEXT.NodeJS: + set + ? (context.global.process.env[key] = stash) + : (delete context.global.process.env[key]); + break; + case CONTEXT.GoogleAppsScript: + set + ? context.global.PropertiesService?.getUserProperties().setProperty(key, stash) + : context.global.PropertiesService?.getUserProperties().deleteProperty(key); + break; + default: + throw new Error(`Cannot determine Javascript context: ${context.type}`); + } +} +//# sourceMappingURL=storage.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/storage.library.js.map b/packages/shared/dist/storage.library.js.map new file mode 100644 index 00000000..b5b4fca0 --- /dev/null +++ b/packages/shared/dist/storage.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"storage.library.js","sourceRoot":"","sources":["../src/storage.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/string.library.d.ts b/packages/shared/dist/string.library.d.ts new file mode 100644 index 00000000..c9adef69 --- /dev/null +++ b/packages/shared/dist/string.library.d.ts @@ -0,0 +1,36 @@ +/** + * clean a string to remove some standard control-characters (tab, line-feed, carriage-return) and trim redundant spaces. + * allow for optional RegExp to specify additional match + */ +export declare function trimAll(str: string | number, pat?: RegExp): string; +/** every word has its first letter capitalized */ +export declare function toProperCase(...str: T[]): T; +export declare const toCamelCase: (sentence: T) => T; +export declare const randomString: (len?: number) => string; +/** use sprintf-style formatting on a string */ +export declare function sprintf(fmt: string, ...msg: any[]): string; +export declare function sprintf(...msg: any[]): string; +/** apply a plural suffix, if greater than '1' */ +export declare const plural: (val: string | number | Record, word: string, plural?: string) => string | ((num: string, word: string) => string); +/** strip a plural suffix, if endsWith 's' */ +export declare const singular: (val: string) => string; +/** make an Object's values into a Template Literals, and evaluate */ +export declare const makeTemplate: (templateString: Object) => (templateData: Object) => any; +export declare const toLower: (str: T) => string | T; +export declare const toUpper: (str: T) => string | T; +/** assert string is within bounds */ +type StrLen = string & { + __value__: never; +}; +export declare const strlen: (str: unknown, min: Min, max?: Max) => StrLen; +/** + * pad a string with leading character + * @param nbr input value to pad + * @param len fill-length (default: 2) + * @param fill character (default \ for string and \ for number) + * @returns fixed-length string padded on the left with fill-character + */ +export declare const pad: (nbr?: string | number | bigint, len?: number, fill?: string | number) => string; +/** pad a string with non-blocking spaces, to help right-align a display */ +export declare const padString: (str: string | number | bigint, pad?: number) => string; +export {}; diff --git a/packages/shared/dist/string.library.js b/packages/shared/dist/string.library.js new file mode 100644 index 00000000..6bb207ac --- /dev/null +++ b/packages/shared/dist/string.library.js @@ -0,0 +1,92 @@ +import { asNumber, asString, isNumeric } from '#core/shared/coercion.library.js'; +import { stringify } from '#core/shared/serialize.library.js'; +import { isString, isObject, assertCondition, assertString, nullToValue } from '#core/shared/type.library.js'; +// General functions +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// This section needs to be Function declarations so that they are hoisted +// (because they are referenced in prototype.library) +/** + * clean a string to remove some standard control-characters (tab, line-feed, carriage-return) and trim redundant spaces. + * allow for optional RegExp to specify additional match + */ +export function trimAll(str, pat) { + return str + .toString() // coerce to String + .replace(pat, '') // remove regexp, if supplied + .replace(/\t/g, ' ') // replace with + .replace(/(\r\n|\n|\r)/g, ' ') // replace & + .replace(/\s{2,}/g, ' ') // trim multiple + .trim(); // leading/trailing +} +/** every word has its first letter capitalized */ +export function toProperCase(...str) { + return str + .flat() // in case {str} was already an array + .map(text => text.replace(/\w\S*/g, word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase())) + .join(' '); +} +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +const PAT = /[A-Z\xC0-\xD6\xD8-\xDE]?[a-z\xDF-\xF6\xF8-\xFF]+|[A-Z\xC0-\xD6\xD8-\xDE]+(?![a-z\xDF-\xF6\xF8-\xFF])|\d+/g; +export const toCamelCase = (sentence) => { + let [word, ...rest] = sentence.match(PAT) ?? ['']; + if (isNumeric(word)) { + word = rest[0]; + rest.splice(0, 1); + } + return (sentence.startsWith('_') ? '_' : '') + word.toLocaleLowerCase() + toProperCase(...rest).replace(/ /g, ''); +}; +const HEX = 16; +export const randomString = (len = 36) => { + let str = ''; + do // generate random strings + str += Math.floor(Math.random() * 10 ** 16).toString(HEX).substring(2, 15); + while (str.length < len); + return str.substring(0, len); +}; +export function sprintf(fmt, ...msg) { + const regexp = /\$\{(\d)\}/g; // pattern to find "${digit}" parameter markers + let sfmt = asString(fmt); // avoid mutate fmt + if (!isString(fmt)) { // might be an Object + msg.unshift(JSON.stringify(fmt)); // push to start of msg[] + sfmt = ''; // reset the string-format + } + let cnt = 0; // if the format does not contain a corresponding '${digit}' then re-construct the parameters + sfmt = sfmt.replace(/%[sj]/g, _ => `\${${cnt++}}`); // flip all the %s or %j to a ${digit} parameter + const params = Array.from(sfmt.matchAll(regexp)) + .map(match => Number(match[1])); // which parameters are in the fmt + msg.forEach((_, idx) => { + if (!params.includes(idx)) // if more args than params + sfmt += `${sfmt.length === 0 ? '' : sfmt.endsWith(':') ? ' ' : ', '}\${${idx}}`; // append a dummy params to fmt + }); + // 2024-02-21 some Objects do not have a .toString method + return sfmt.replace(regexp, (_, idx) => msg[idx]?.toString?.() || stringify(msg[idx])); +} +/** apply a plural suffix, if greater than '1' */ +export const plural = (val, word, plural = word + 's') => { + const _plural = (num, word, plural = word + 's') => [1, -1].includes(Number(num)) ? word : plural; + return isObject(val) + ? (num, word) => _plural(num, word, val[word]) + : _plural(val, word, plural); +}; +/** strip a plural suffix, if endsWith 's' */ +export const singular = (val) => val.endsWith('s') ? val.slice(0, -1) : val; +/** make an Object's values into a Template Literals, and evaluate */ +export const makeTemplate = (templateString) => (templateData) => new Function(`{${Object.keys(templateData).join(',')}}`, 'return `' + templateString + '`')(templateData); +export const toLower = (str) => isString(str) ? asString(str).toLowerCase().trim() : str; +export const toUpper = (str) => isString(str) ? asString(str).toUpperCase().trim() : str; +export const strlen = (str, min, max) => { + assertString(str); + assertCondition(str.length >= min && str.length <= (max ?? min), 'string length is not between specified min and max'); + return str; +}; +/** + * pad a string with leading character + * @param nbr input value to pad + * @param len fill-length (default: 2) + * @param fill character (default \ for string and \ for number) + * @returns fixed-length string padded on the left with fill-character + */ +export const pad = (nbr = 0, len = 2, fill) => nbr.toString().padStart(len, nullToValue(fill, isNumeric(nbr) ? '0' : ' ').toString()); +/** pad a string with non-blocking spaces, to help right-align a display */ +export const padString = (str, pad = 6) => (isNumeric(str) ? asNumber(str).toFixed(2).toString() : str.toString() ?? '').padStart(pad, '\u007F'); +//# sourceMappingURL=string.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/string.library.js.map b/packages/shared/dist/string.library.js.map new file mode 100644 index 00000000..c62c92fc --- /dev/null +++ b/packages/shared/dist/string.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"string.library.js","sourceRoot":"","sources":["../src/string.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/type.library.d.ts b/packages/shared/dist/type.library.d.ts new file mode 100644 index 00000000..50f289da --- /dev/null +++ b/packages/shared/dist/type.library.d.ts @@ -0,0 +1,334 @@ +/** + * return an object's type as a ProperCase string. + * if instance, return Class name + */ +export declare const getType: (obj?: any, ...instances: Instance[]) => keyof TypeValueMap; +/** return TypeValue object */ +export declare const asType: (value?: T, ...instances: Instance[]) => TypeValue; +/** assert value is one of a list of Types */ +export declare const isType: (obj: unknown, ...types: Type[]) => obj is T; +/** Type-Guards: assert \ is of \ */ +export declare const isPrimitive: (obj?: unknown) => obj is Primitive; +export declare const isReference: (obj?: unknown) => obj is Object; +export declare const isIterable: (obj: unknown) => obj is Iterable; +export declare const isString: (obj?: T) => obj is Extract; +export declare const isNumber: (obj?: T) => obj is Extract; +export declare const isInteger: (obj?: T) => obj is Extract; +export declare const isIntegerLike: (obj?: T) => obj is Extract; +export declare const isDigit: (obj?: T) => obj is Extract; +export declare const isBoolean: (obj?: T) => obj is Extract; +export declare const isArray: (obj: unknown) => obj is T[]; +export declare const isArrayLike: (obj: any) => obj is ArrayLike; +export declare const isObject: (obj?: T) => obj is Extract; +export declare const isDate: (obj?: T) => obj is Extract; +export declare const isRegExp: (obj?: T) => obj is Extract; +export declare const isRegExpLike: (obj?: T) => obj is Extract; +export declare const isSymbol: (obj?: T) => obj is Extract; +export declare const isSymbolFor: (obj?: T) => obj is Extract; +export declare const isPropertyKey: (obj?: unknown) => obj is PropertyKey; +export declare const isNull: (obj?: T) => obj is Extract; +export declare const isNullish: (obj: T) => obj is Extract; +export declare const isUndefined: (obj?: T) => obj is undefined; +export declare const isDefined: (obj: T) => obj is NonNullable; +export declare const isClass: (obj?: T) => obj is Extract; +export declare const isFunction: (obj?: T) => obj is Extract; +export declare const isPromise: (obj?: T) => obj is Extract>; +export declare const isMap: (obj?: T) => obj is Extract>; +export declare const isSet: (obj?: T) => obj is Extract>; +export declare const isError: (err?: T) => err is Extract; +export declare const isTemporal: (obj: T) => obj is Extract; +export declare const isTempo: (obj?: T) => obj is Extract>; +export declare const isEnum: >(obj?: T) => obj is Extract>; +export declare const isPledge: (obj?: T) => obj is Extract>; +export declare const nullToZero: (obj: T) => 0 | NonNullable; +export declare const nullToEmpty: (obj: T) => "" | NonNullable; +export declare const nullToValue: (obj: T, value: R) => R | NonNullable; +/** object has no values */ +export declare const isEmpty: (obj?: T) => boolean; +export declare function assertCondition(condition: boolean, message?: string): asserts condition; +export declare function assertString(str: unknown): asserts str is string; +export declare function assertNever(val: never): asserts val is never; +/** infer T of a */ export type TValue = T extends Array ? A : NonNullable; +/** cast as */ export type TValues = TValue | Array> | Extract; +/** cast as T[] */ export type TArray = Array>; +/** bottom value */ export type Nullish = null | undefined | void; +/** Generic Record */ export type Property = Record; +/** Generic Record or Array */ export type Obj = Property | Array; +type SafeRecursion = 50; +type SafeCount> = Acc['length'] extends SafeRecursion ? number : 0 extends (1 & T) ? number : [ + T +] extends [never] ? Acc['length'] : SafeCount, [...Acc, any]>; +/** Own properties of an Array, Object, Map or Enum */ +export type WellKnownSymbols = { + [K in keyof SymbolConstructor]: SymbolConstructor[K] extends symbol ? SymbolConstructor[K] : never; +}[keyof SymbolConstructor]; +/** Augmentable map of method/property names to exclude from KeyOf/ValueOf/OwnOf */ +export interface IgnoreOfMap { +} +type IgnoreOf = WellKnownSymbols | keyof IgnoreOfMap; +export type CountOf = SafeCount; +export type OwnOf = T extends Array ? { + [K in number]: T[number]; +} : Omit; +export type KeyOf = T extends Array ? number : Exclude, IgnoreOf>; +export type ValueOf = T extends Array ? T[number] : T[KeyOf]; +export type EntryOf = [KeyOf, ValueOf]; +/** extracts only the Literal string keys (not index signatures) from an object/interface */ +export type LiteralKey = { + [K in keyof T]: string extends K ? never : K; +}[keyof T] & string; +/** remove readonly from all keys */ +export type Mutable = { + -readonly [K in keyof T]: T[K]; +}; +/** mark some fields as Optional */ +export type Optional = Omit & Partial>; +/** Remove 'optional' on keys as well as 'undefined' on values */ +export type NonOptional = { + [K in keyof T]-?: Exclude; +}; +/** Record with only one-key */ +export type OneKey = { + [P in K]: { + [Q in P]: V; + } & { + [Q in Exclude]?: undefined; + } extends infer O ? { + [Q in keyof O]: O[Q]; + } : never; +}[K]; +export type Prettify = { + [K in keyof T]: T[K]; +} & {}; +export type ParseInt = T extends `${infer N extends number}` ? N : never; +export type Plural = `${T}s`; +type toName = T extends string ? "String" : T extends number ? "Number" : T extends bigint ? "BigInt" : T extends boolean ? "Boolean" : T extends symbol ? "Symbol" : T extends void ? "Void" : T extends undefined ? "Undefined" : T extends null ? "Null" : never; +type Primitive = string | number | bigint | boolean | symbol | void | undefined | null; +export type Primitives = toName; +/** Generic constructor type */ +export type Constructor = new (...args: any[]) => T; +type Instance = { + type: string; + class: Function; +}; +export type Temporals = typeof Temporal extends { + Now: any; +} ? Exclude : never; +export interface TypeValueMap { + String: { + type: 'String'; + value: string; + }; + Number: { + type: 'Number'; + value: number; + }; + BigInt: { + type: 'BigInt'; + value: bigint; + }; + Boolean: { + type: 'Boolean'; + value: boolean; + }; + Object: { + type: 'Object'; + value: Extract>; + }; + Array: { + type: 'Array'; + value: Array; + }; + ArrayLike: { + type: 'ArrayLike'; + value: ArrayLike; + }; + Undefined: { + type: 'Undefined'; + value: undefined; + }; + Null: { + type: 'Null'; + value: null; + }; + Void: { + type: 'Void'; + value: void; + }; + Empty: { + type: 'Empty'; + value: unknown; + }; + Date: { + type: 'Date'; + value: Date; + }; + Function: { + type: 'Function'; + value: Function; + }; + AsyncFunction: { + type: 'AsyncFunction'; + value: Function; + }; + Class: { + type: 'Class'; + value: T; + }; + Promise: { + type: 'Promise'; + value: Promise; + }; + RegExp: { + type: 'RegExp'; + value: RegExp; + }; + Blob: { + type: 'Blob'; + value: Blob; + }; + Map: { + type: 'Map'; + value: Map; + }; + Set: { + type: 'Set'; + value: Set; + }; + WeakSet: { + type: 'WeakSet'; + value: WeakSet>; + }; + WeakMap: { + type: 'WeakMap'; + value: WeakMap, T>; + }; + WeakRef: { + type: 'WeakRef'; + value: any; + }; + Symbol: { + type: 'Symbol'; + value: symbol; + }; + Error: { + type: 'Error'; + value: Error; + }; + Temporal: { + type: 'Temporal'; + value: Temporals; + }; + 'Temporal.Instant': { + type: 'Temporal.Instant'; + value: Temporal.Instant; + }; + 'Temporal.ZonedDateTime': { + type: 'Temporal.ZonedDateTime'; + value: Temporal.ZonedDateTime; + }; + 'Temporal.PlainDateTime': { + type: 'Temporal.PlainDateTime'; + value: Temporal.PlainDateTime; + }; + 'Temporal.PlainDate': { + type: 'Temporal.PlainDate'; + value: Temporal.PlainDate; + }; + 'Temporal.PlainTime': { + type: 'Temporal.PlainTime'; + value: Temporal.PlainTime; + }; + 'Temporal.PlainYearMonth': { + type: 'Temporal.PlainYearMonth'; + value: Temporal.PlainYearMonth; + }; + 'Temporal.PlainMonthDay': { + type: 'Temporal.PlainMonthDay'; + value: Temporal.PlainMonthDay; + }; +} +export type Type = keyof TypeValueMap; +export type TypeValue = TypeValueMap[keyof TypeValueMap]; +/** late-binding Type utility for augmented modules */ +export type GetType = K extends keyof TypeValueMap ? TypeValueMap[K]['value'] : any; +type TupleEntry = T extends readonly [infer Head, ...infer Tail] ? TupleEntry : R; +type ObjectEntry> = T extends object ? { + [K in keyof T]: [T[K]] extends [never] ? never : [K, Required[K]]; +}[keyof T] extends infer E ? E extends [infer K extends string | number, infer V] ? [`${K}`, V] : E extends [infer K extends symbol, infer V] ? [K, V] : never : never : never; +/** if T extends readonly[] => [number, T], if T extends {} => [key:string, T] */ +export type Entry> = T extends readonly [unknown, ...unknown[]] ? TupleEntry : T extends ReadonlyArray ? [`${number}`, U] : ObjectEntry; +/** Object.entries as [number,T][] */ +export type Entries> = ReadonlyArray>; +/** invert key-value object */ +export type Inverse = { + [K in keyof T as (T[K] & PropertyKey)]: K; +}; +/** assign array indexes as values in an object */ +export type Index = { + [K in Entry as `${K[1]}`]: ParseInt; +}; +/** reverse a Tuple */ +export type Reverse = ReturnType Reverse : () => R>; +/** reverse a Record */ +export type Invert> = { + [K in keyof T as T[K]]: K; +}; +type EnumerateMin = Acc["length"] extends N ? Acc[number] : EnumerateMin; +type EnumerateMax = Acc["length"] extends N ? ([...Acc, Acc["length"]])[number] : EnumerateMax; +/** declare expected range of values */ +export type IntRange = Exclude, EnumerateMin>; +declare const __brand: unique symbol; +type Brand = { + [__brand]: B; +}; +export type Branded = T & Brand; +export type EmptyObject = { + [__brand]?: never; +}; +type Length = T extends `${string}${infer Tail}` ? Length : Count["length"]; +type Compare = First extends Second ? 0 : Count["length"] extends First ? -1 : Count["length"] extends Second ? 1 : Compare; +export type MaxLength = Compare, Max> extends -1 | 0 ? T : never; +export type MinLength = Compare> extends -1 | 0 ? T : never; +export type InRange = MinLength & MaxLength; +/** + * return a substring of a string-type + * eg: Substr returns Mon|Tue|Wed + * U is the original string union + * Max is the number of chars to return + * Start is the offset (starting from '1') + */ +export type Substring = Substr; +/** + * internal Type for Substring<> to recurse + * Str is the string to build and return + * Offset is an internal array used to assist with determining start-point of T + */ +type Substr = U extends `${infer NextChar}${infer Rest}` ? Offset["length"] extends Start ? Length extends Max ? Str : Substr : Substr : Str; +type UnionToIntersection = (U extends unknown ? (arg: U) => 0 : never) extends (arg: infer I) => 0 ? I : never; +type LastInUnion = UnionToIntersection 0 : never> extends (x: infer L) => 0 ? L : never; +/** + * convert a Union to a Tuple. + * usage: UnionToTuple = [A, B] + */ +export type UnionToTuple> = Acc['length'] extends SafeRecursion ? T[] : [ + T +] extends [never] ? Acc : UnionToTuple, [Last, ...Acc]>; +/** Deep Readonly object for type safety */ +export type Secure = T extends (infer R)[] ? SecureArray : T extends Function ? T : T extends object ? SecureObject : T; +export interface SecureArray extends ReadonlyArray> { +} +export type SecureObject = { + readonly [K in keyof T]: Secure; +}; +type LooseString = (string & {}); +type LooseProperty = (PropertyKey & {}); +/** Loose union */ +export type LooseUnion = T | LooseString; +/** Loose property key */ +export type LooseKey = K | LooseProperty; +/** Extend an object with a generic-signature */ +export type Extend = T & { + [P in K]: V; +}; +export {}; diff --git a/packages/shared/dist/type.library.js b/packages/shared/dist/type.library.js new file mode 100644 index 00000000..13c3b1e0 --- /dev/null +++ b/packages/shared/dist/type.library.js @@ -0,0 +1,81 @@ +/** the primitive type reported by toStringTag() */ +const protoType = (obj) => Object.prototype.toString.call(obj).slice(8, -1); +/** + * return an object's type as a ProperCase string. + * if instance, return Class name + */ +export const getType = (obj, ...instances) => { + const type = protoType(obj); + switch (true) { + case type === 'Object': + const name = isArrayLike(obj) + ? 'ArrayLike' // special case Object: ArrayLike + : obj.constructor?.name ?? 'Object'; // some Objects do not have a constructor method + return (instances + .find(inst => obj instanceof inst.class)?.type // allow for 'real' name of Instance, after minification + ?? name); // return Object name + case type === 'Function' && Function.prototype.toString.call(obj).startsWith('class '): + return 'Class'; + default: + return type; + } +}; +/** return TypeValue object */ +export const asType = (value, ...instances) => ({ type: getType(value, ...instances), value }); +/** assert value is one of a list of Types */ +export const isType = (obj, ...types) => types.includes(getType(obj)); +/** Type-Guards: assert \ is of \ */ +export const isPrimitive = (obj) => isType(obj, 'String', 'Number', 'BigInt', 'Boolean', 'Symbol', 'Undefined', 'Void', 'Null', 'Empty'); +export const isReference = (obj) => !isPrimitive(obj); +export const isIterable = (obj) => Symbol.iterator in Object(obj) && !isString(obj); +export const isString = (obj) => isType(obj, 'String'); +export const isNumber = (obj) => isType(obj, 'Number') && isFinite(obj); +export const isInteger = (obj) => isType(obj, 'BigInt'); +export const isIntegerLike = (obj) => isType(obj, 'String') && /^-?[0-9]+n$/.test(obj); +export const isDigit = (obj) => isType(obj, 'Number', 'BigInt'); +export const isBoolean = (obj) => isType(obj, 'Boolean'); +export const isArray = (obj) => isType(obj, 'Array'); +export const isArrayLike = (obj) => protoType(obj) === 'Object' && 'length' in obj && Object.keys(obj).every(key => key === 'length' || !isNaN(Number(key))); +export const isObject = (obj) => isType(obj, 'Object'); +export const isDate = (obj) => isType(obj, 'Date'); +export const isRegExp = (obj) => isType(obj, 'RegExp'); +export const isRegExpLike = (obj) => isType(obj, 'String') && /^\/.*\/$/.test(obj); +export const isSymbol = (obj) => isType(obj, 'Symbol'); +export const isSymbolFor = (obj) => isType(obj, 'Symbol') && Symbol.keyFor(obj) !== undefined; +export const isPropertyKey = (obj) => isType(obj, 'String', 'Number', 'Symbol'); +export const isNull = (obj) => isType(obj, 'Null'); +export const isNullish = (obj) => isType(obj, 'Null', 'Undefined', 'Void', 'Empty'); +export const isUndefined = (obj) => isType(obj, 'Undefined', 'Void', 'Empty'); +export const isDefined = (obj) => !isNullish(obj); +export const isClass = (obj) => isType(obj, 'Class'); +export const isFunction = (obj) => isType(obj, 'Function', 'AsyncFunction'); +export const isPromise = (obj) => isType(obj, 'Promise'); +export const isMap = (obj) => isType(obj, 'Map'); +export const isSet = (obj) => isType(obj, 'Set'); +export const isError = (err) => isType(err, 'Error'); +export const isTemporal = (obj) => protoType(obj).startsWith('Temporal.'); +// non-standard Objects +export const isTempo = (obj) => isType(obj, 'Tempo'); +export const isEnum = (obj) => isType(obj, 'Enumify'); +export const isPledge = (obj) => isType(obj, 'Pledge'); +export const nullToZero = (obj) => obj ?? 0; +export const nullToEmpty = (obj) => obj ?? ''; +export const nullToValue = (obj, value) => obj ?? value; +/** object has no values */ +export const isEmpty = (obj) => false + || isNullish(obj) + || (isObject(obj) && (Reflect.ownKeys(obj).length === 0)) + || (isString(obj) && (obj.trim().length === 0)) + || (isNumber(obj) && (isNaN(obj) === true)) + || (isArray(obj) && (obj.length === 0)) + || (isSet(obj) && (obj.size === 0)) + || (isMap(obj) && (obj.size === 0)); +export function assertCondition(condition, message) { + if (!condition) + throw new Error(message); +} +export function assertString(str) { assertCondition(isString(str), `Invalid string: ${str}`); } +; +export function assertNever(val) { throw new Error(`Unexpected object: ${val}`); } +; +//# sourceMappingURL=type.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/type.library.js.map b/packages/shared/dist/type.library.js.map new file mode 100644 index 00000000..5a20a54e --- /dev/null +++ b/packages/shared/dist/type.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"type.library.js","sourceRoot":"","sources":["../src/type.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/dist/utility.library.d.ts b/packages/shared/dist/utility.library.d.ts new file mode 100644 index 00000000..cde35a49 --- /dev/null +++ b/packages/shared/dist/utility.library.d.ts @@ -0,0 +1,32 @@ +import type { Secure, ValueOf } from '#core/shared/type.library.js'; +/** General utility functions */ +/** analyze the Call Stack to determine calling Function's name */ +export declare const getCaller: () => string; +/** analyze the Call Stack to determine calling Function's name */ +export declare const getScript: (nbr?: number) => string; +/** + * introduce a wait-timer that will Error() on timeOut. + * best used with Promise.race([xxx(), sleep()] + * @param msg string to display on a timeout + * @param timeOut how many milliseconds to sleep (default 2-seconds) + * @returns Promise\ + */ +export declare const sleep: (msg?: string, timeOut?: number) => Promise; +/** Javascript Runtimes */ +export declare const CONTEXT: { + readonly Unknown: "unknown"; + readonly Browser: "browser"; + readonly NodeJS: "nodejs"; + readonly Deno: "deno"; + readonly GoogleAppsScript: "google-apps-script"; +}; +export type CONTEXT = ValueOf; +type Context = { + global: any; + type: CONTEXT; +}; +/** determine JavaScript environment context */ +export declare const getContext: () => Context; +/** deep-freeze an Array | Object to make it immutable */ +export declare function secure(obj: T): Secure; +export {}; diff --git a/packages/shared/dist/utility.library.js b/packages/shared/dist/utility.library.js new file mode 100644 index 00000000..3e9c3c8a --- /dev/null +++ b/packages/shared/dist/utility.library.js @@ -0,0 +1,55 @@ +import { ownValues } from '#core/shared/reflection.library.js'; +import { isDefined, isReference } from '#core/shared/type.library.js'; +/** General utility functions */ +/** analyze the Call Stack to determine calling Function's name */ +export const getCaller = () => { + const stackTrace = new Error().stack // only tested in latest FF and Chrome + ?.split('\n') + ?.map(itm => itm.trim()) + ?.filter(itm => !itm.startsWith('Error')) + ?? []; + const callerName = stackTrace[2].split(' '); + return (callerName[1] === 'new') ? callerName[2] : callerName[1].split('.')[0]; +}; +/** analyze the Call Stack to determine calling Function's name */ +export const getScript = (nbr = 1) => { + const stackTrace = new Error().stack + ?.match(/([^ \n\(@])*([a-z]*:\/\/\/?)*?[a-z0-9\/\\]*\.js/ig)?.[nbr]; + return decodeURI(stackTrace ?? ''); // decodeURI is needed to handle spaces in file-names +}; +/** + * introduce a wait-timer that will Error() on timeOut. + * best used with Promise.race([xxx(), sleep()] + * @param msg string to display on a timeout + * @param timeOut how many milliseconds to sleep (default 2-seconds) + * @returns Promise\ + */ +export const sleep = (msg = 'sleep: timed out', timeOut = 2000) => new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), timeOut)); +/** Javascript Runtimes */ +export const CONTEXT = { + 'Unknown': 'unknown', + 'Browser': 'browser', + 'NodeJS': 'nodejs', + 'Deno': 'deno', + 'GoogleAppsScript': 'google-apps-script', +}; +/** determine JavaScript environment context */ +export const getContext = () => { + const global = globalThis; + if (isDefined(global.SpreadsheetApp)) + return { global, type: CONTEXT.GoogleAppsScript }; + if (isDefined(global.window?.document)) + return { global, type: CONTEXT.Browser }; + if (isDefined(global.process?.versions?.node)) + return { global, type: CONTEXT.NodeJS }; + return { global, type: CONTEXT.Unknown }; +}; +// useful for those times when a full Enumify object is not needed, but still lock the Object from mutations +/** deep-freeze an Array | Object to make it immutable */ +export function secure(obj) { + if (isReference(obj)) // skip primitive values + ownValues(obj) // retrieve the properties on obj + .forEach(val => Object.isFrozen(val) || secure(val)); // secure each value, if not already Frozen + return Object.freeze(obj); // freeze the object itself +} +//# sourceMappingURL=utility.library.js.map \ No newline at end of file diff --git a/packages/shared/dist/utility.library.js.map b/packages/shared/dist/utility.library.js.map new file mode 100644 index 00000000..708ec72a --- /dev/null +++ b/packages/shared/dist/utility.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utility.library.js","sourceRoot":"","sources":["../src/utility.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/package.json b/packages/shared/package.json new file mode 100644 index 00000000..ef34fae2 --- /dev/null +++ b/packages/shared/package.json @@ -0,0 +1,31 @@ +{ + "name": "@magma/shared", + "version": "1.1.0", + "description": "Shared utility library for Tempo", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./*": { + "types": "./dist/*.d.ts", + "import": "./dist/*" + } + }, + "imports": { + "#core/shared/*": { + "development": "./src/*", + "default": "./dist/*" + } + }, + "scripts": { + "build": "tsc -b", + "clean": "tsc -b --clean" + }, + "dependencies": { + "tslib": "^2.8.1" + } +} \ No newline at end of file diff --git a/lib/array.library.ts b/packages/shared/src/array.library.ts similarity index 96% rename from lib/array.library.ts rename to packages/shared/src/array.library.ts index af62178d..03af77ab 100644 --- a/lib/array.library.ts +++ b/packages/shared/src/array.library.ts @@ -5,9 +5,6 @@ import { stringify } from '#core/shared/serialize.library.js'; import { isNumber, isDate, isTempo, isObject, isDefined, isUndefined, isFunction, nullToValue } from '#core/shared/type.library.js'; import type { Property } from '#core/shared/type.library.js'; -/** Coerce {value} into {value[]} ( if not already ), with optional {fill} Object */ -export { asArray } from '#core/shared/coercion.library.js'; - // adapted from https://jsbin.com/insert/4/edit?js,output /** insert a value into an Array by its sorted position */ export const sortInsert = (arr: T[] = [], val: T, key?: K) => { diff --git a/packages/shared/src/buffer.library.ts b/packages/shared/src/buffer.library.ts new file mode 100644 index 00000000..a11f50ee --- /dev/null +++ b/packages/shared/src/buffer.library.ts @@ -0,0 +1,214 @@ +"use strict"; + +// https://developer.mozilla.org/en-US/docs/Glossary/Base64 + +// Array of bytes to Base64 string decoding +export function b64ToUint6(nChr: number) { + return nChr > 64 && nChr < 91 + ? nChr - 65 + : nChr > 96 && nChr < 123 + ? nChr - 71 + : nChr > 47 && nChr < 58 + ? nChr + 4 + : nChr === 43 + ? 62 + : nChr === 47 + ? 63 + : 0; +} + +export function base64DecToArr(sBase64: string, nBlocksSize?: number) { + const sB64Enc = sBase64.replace(/[^A-Za-z0-9+/]/g, ""); + const nInLen = sB64Enc.length; + const nOutLen = nBlocksSize + ? Math.ceil(((nInLen * 3 + 1) >> 2) / nBlocksSize) * nBlocksSize + : (nInLen * 3 + 1) >> 2; + const taBytes = new Uint8Array(nOutLen); + + let nMod3; + let nMod4; + let nUint24 = 0; + let nOutIdx = 0; + for (let nInIdx = 0; nInIdx < nInLen; nInIdx++) { + nMod4 = nInIdx & 3; + nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (6 * (3 - nMod4)); + if (nMod4 === 3 || nInLen - nInIdx === 1) { + nMod3 = 0; + while (nMod3 < 3 && nOutIdx < nOutLen) { + taBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255; + nMod3++; + nOutIdx++; + } + nUint24 = 0; + } + } + + return taBytes; +} + +/* Base64 string to array encoding */ +export function uint6ToB64(nUint6: number) { + return nUint6 < 26 + ? nUint6 + 65 + : nUint6 < 52 + ? nUint6 + 71 + : nUint6 < 62 + ? nUint6 - 4 + : nUint6 === 62 + ? 43 + : nUint6 === 63 + ? 47 + : 65; +} + +export function base64EncArr(aBytes: Uint8Array) { + let nMod3 = 2; + let sB64Enc = ""; + + const nLen = aBytes.length; + let nUint24 = 0; + for (let nIdx = 0; nIdx < nLen; nIdx++) { + nMod3 = nIdx % 3; + if (nIdx > 0 && ((nIdx * 4) / 3) % 76 === 0) { + sB64Enc += "\r\n"; + } + + nUint24 |= aBytes[nIdx] << ((16 >>> nMod3) & 24); + if (nMod3 === 2 || aBytes.length - nIdx === 1) { + sB64Enc += String.fromCodePoint( + uint6ToB64((nUint24 >>> 18) & 63), + uint6ToB64((nUint24 >>> 12) & 63), + uint6ToB64((nUint24 >>> 6) & 63), + uint6ToB64(nUint24 & 63) + ); + nUint24 = 0; + } + } + return ( + sB64Enc.substring(0, sB64Enc.length - 2 + nMod3) + + (nMod3 === 2 ? "" : nMod3 === 1 ? "=" : "==") + ); +} + +/* UTF-8 array to JS string and vice versa */ + +export function UTF8ArrToStr(aBytes: Uint8Array) { + let sView = ""; + let nPart; + const nLen = aBytes.length; + for (let nIdx = 0; nIdx < nLen; nIdx++) { + nPart = aBytes[nIdx]; + sView += String.fromCodePoint( + nPart > 251 && nPart < 254 && nIdx + 5 < nLen /* six bytes */ + ? /* (nPart - 252 << 30) may be not so safe in ECMAScript! So…: */ + (nPart - 252) * 1073741824 + + ((aBytes[++nIdx] - 128) << 24) + + ((aBytes[++nIdx] - 128) << 18) + + ((aBytes[++nIdx] - 128) << 12) + + ((aBytes[++nIdx] - 128) << 6) + + aBytes[++nIdx] - + 128 + : nPart > 247 && nPart < 252 && nIdx + 4 < nLen /* five bytes */ + ? ((nPart - 248) << 24) + + ((aBytes[++nIdx] - 128) << 18) + + ((aBytes[++nIdx] - 128) << 12) + + ((aBytes[++nIdx] - 128) << 6) + + aBytes[++nIdx] - + 128 + : nPart > 239 && nPart < 248 && nIdx + 3 < nLen /* four bytes */ + ? ((nPart - 240) << 18) + + ((aBytes[++nIdx] - 128) << 12) + + ((aBytes[++nIdx] - 128) << 6) + + aBytes[++nIdx] - + 128 + : nPart > 223 && nPart < 240 && nIdx + 2 < nLen /* three bytes */ + ? ((nPart - 224) << 12) + + ((aBytes[++nIdx] - 128) << 6) + + aBytes[++nIdx] - + 128 + : nPart > 191 && nPart < 224 && nIdx + 1 < nLen /* two bytes */ + ? ((nPart - 192) << 6) + aBytes[++nIdx] - 128 + : /* nPart < 127 ? */ /* one byte */ + nPart + ); + } + return sView; +} + +export function strToUTF8Arr(sDOMStr: string) { + let aBytes; + let nChr: number; + const nStrLen = sDOMStr.length; + let nArrLen = 0; + + /* mapping… */ + for (let nMapIdx = 0; nMapIdx < nStrLen; nMapIdx++) { + nChr = sDOMStr.codePointAt(nMapIdx)!; + + if (nChr > 65536) { + nMapIdx++; + } + + nArrLen += + nChr < 0x80 + ? 1 + : nChr < 0x800 + ? 2 + : nChr < 0x10000 + ? 3 + : nChr < 0x200000 + ? 4 + : nChr < 0x4000000 + ? 5 + : 6; + } + + aBytes = new Uint8Array(nArrLen); + + /* transcription… */ + let nIdx = 0; + let nChrIdx = 0; + while (nIdx < nArrLen) { + nChr = sDOMStr.codePointAt(nChrIdx)!; + if (nChr < 128) { + /* one byte */ + aBytes[nIdx++] = nChr; + } else if (nChr < 0x800) { + /* two bytes */ + aBytes[nIdx++] = 192 + (nChr >>> 6); + aBytes[nIdx++] = 128 + (nChr & 63); + } else if (nChr < 0x10000) { + /* three bytes */ + aBytes[nIdx++] = 224 + (nChr >>> 12); + aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); + aBytes[nIdx++] = 128 + (nChr & 63); + } else if (nChr < 0x200000) { + /* four bytes */ + aBytes[nIdx++] = 240 + (nChr >>> 18); + aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); + aBytes[nIdx++] = 128 + (nChr & 63); + nChrIdx++; + } else if (nChr < 0x4000000) { + /* five bytes */ + aBytes[nIdx++] = 248 + (nChr >>> 24); + aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); + aBytes[nIdx++] = 128 + (nChr & 63); + nChrIdx++; + } /* if (nChr <= 0x7fffffff) */ else { + /* six bytes */ + aBytes[nIdx++] = 252 + (nChr >>> 30); + aBytes[nIdx++] = 128 + ((nChr >>> 24) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63); + aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63); + aBytes[nIdx++] = 128 + (nChr & 63); + nChrIdx++; + } + nChrIdx++; + } + + return aBytes; +} diff --git a/lib/cipher.class.ts b/packages/shared/src/cipher.class.ts similarity index 98% rename from lib/cipher.class.ts rename to packages/shared/src/cipher.class.ts index eaf9cc4a..fa057615 100644 --- a/lib/cipher.class.ts +++ b/packages/shared/src/cipher.class.ts @@ -1,5 +1,5 @@ import { toHex } from '#core/shared/number.library.js'; -import { asString } from '#core/shared/string.library.js'; +import { asString } from '#core/shared/coercion.library.js'; import { Immutable, Static } from '#core/shared/class.library.js'; import { stringify, objectify } from '#core/shared/serialize.library.js'; import { base64DecToArr, base64EncArr, strToUTF8Arr, UTF8ArrToStr } from '#core/shared/buffer.library.js'; diff --git a/lib/class.library.ts b/packages/shared/src/class.library.ts similarity index 100% rename from lib/class.library.ts rename to packages/shared/src/class.library.ts diff --git a/lib/coercion.library.ts b/packages/shared/src/coercion.library.ts similarity index 100% rename from lib/coercion.library.ts rename to packages/shared/src/coercion.library.ts diff --git a/lib/enumerate.library.ts b/packages/shared/src/enumerate.library.ts similarity index 100% rename from lib/enumerate.library.ts rename to packages/shared/src/enumerate.library.ts diff --git a/lib/function.library.ts b/packages/shared/src/function.library.ts similarity index 100% rename from lib/function.library.ts rename to packages/shared/src/function.library.ts diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts new file mode 100644 index 00000000..f38904f4 --- /dev/null +++ b/packages/shared/src/index.ts @@ -0,0 +1,19 @@ +export * from './array.library.js'; +export * from './buffer.library.js'; +export * from './cipher.class.js'; +export * from './class.library.js'; +export * from './coercion.library.js'; +export * from './enumerate.library.js'; +export * from './function.library.js'; +export * from './logify.class.js'; +export * from './number.library.js'; +export * from './object.library.js'; +export * from './pledge.class.js'; +export * from './prototype.library.js'; +export * from './proxy.library.js'; +export * from './reflection.library.js'; +export * from './serialize.library.js'; +export * from './storage.library.js'; +export * from './string.library.js'; +export * from './type.library.js'; +export * from './utility.library.js'; diff --git a/lib/logify.class.ts b/packages/shared/src/logify.class.ts similarity index 100% rename from lib/logify.class.ts rename to packages/shared/src/logify.class.ts diff --git a/lib/number.library.ts b/packages/shared/src/number.library.ts similarity index 88% rename from lib/number.library.ts rename to packages/shared/src/number.library.ts index 37c939a3..72914b5e 100644 --- a/lib/number.library.ts +++ b/packages/shared/src/number.library.ts @@ -1,10 +1,6 @@ import { asArray, asNumber, ifNumeric } from '#core/shared/coercion.library.js'; import type { TValues } from '#core/shared/type.library.js'; - -/** convert String | Number | BigInt to Number */ -export { asNumber, asInteger, isNumeric, ifNumeric } from '#core/shared/coercion.library.js'; - /** show Hex value of a number */ export const toHex = (num: TValues = [], len?: number) => asArray(num) // ensure array @@ -49,4 +45,4 @@ export const asTime = (hhmi: string | number) => /** format a value as currency */ export const asCurrency = (str: string | number, scale = 2, currency = 'AUD') => - str.toLocaleString(void 0, { style: 'currency', currency, maximumFractionDigits: scale }); + str.toLocaleString(undefined, { style: 'currency', currency, maximumFractionDigits: scale }); diff --git a/lib/object.library.ts b/packages/shared/src/object.library.ts similarity index 100% rename from lib/object.library.ts rename to packages/shared/src/object.library.ts diff --git a/lib/pledge.class.ts b/packages/shared/src/pledge.class.ts similarity index 97% rename from lib/pledge.class.ts rename to packages/shared/src/pledge.class.ts index 2fb30fdc..15fe8092 100644 --- a/lib/pledge.class.ts +++ b/packages/shared/src/pledge.class.ts @@ -1,5 +1,5 @@ import { Logify } from '#core/shared/logify.class.js'; -import { asArray } from '#core/shared/array.library.js'; +import { asArray } from '#core/shared/coercion.library.js'; import { sprintf } from '#core/shared/string.library.js'; import { ifDefined } from '#core/shared/object.library.js'; import { secure } from '#core/shared/utility.library.js'; @@ -97,7 +97,7 @@ export class Pledge { this.#dbg = new Logify(); Object.assign(this.#status, ifDefined({ tag: arg ?? Pledge.#static.tag, })); } - this.#pledge.promise.catch(() => {}); // global catch-all to prevent unhandled rejections + this.#pledge.promise.catch(() => { }); // global catch-all to prevent unhandled rejections Object.freeze(this); // make this instance immutable } diff --git a/lib/prototype.library.ts b/packages/shared/src/prototype.library.ts similarity index 97% rename from lib/prototype.library.ts rename to packages/shared/src/prototype.library.ts index 972c2ed4..49bb3c33 100644 --- a/lib/prototype.library.ts +++ b/packages/shared/src/prototype.library.ts @@ -1,5 +1,6 @@ import { trimAll, toProperCase } from '#core/shared/string.library.js'; -import { asArray, byKey, byLkp, sortKey, type SortBy } from '#core/shared/array.library.js'; +import { byKey, byLkp, sortKey, type SortBy } from '#core/shared/array.library.js'; +import { asArray } from '#core/shared/coercion.library.js'; import type { Property } from '#core/shared/type.library.js'; // Prototype extensions diff --git a/packages/shared/src/proxy.library.ts b/packages/shared/src/proxy.library.ts new file mode 100644 index 00000000..816acc1e --- /dev/null +++ b/packages/shared/src/proxy.library.ts @@ -0,0 +1,46 @@ +import { $Target, allObject } from '#core/shared/reflection.library.js'; +import { secure } from '#core/shared/utility.library.js'; +import { isFunction } from '#core/shared/type.library.js'; + +/** Node.js custom inspection symbol */ +const $Inspect = Symbol.for('nodejs.util.inspect.custom'); + +/** Stealth Proxy pattern to allow for iteration and logging over a Frozen object */ +export function getProxy(target: T) { + secure(target); + const tgt = (target as any)[$Target] ?? target; + let cachedJSON: any; + + return new Proxy(target, { + isExtensible: (t) => Reflect.isExtensible(t), + preventExtensions: (t) => Reflect.preventExtensions(t), + getOwnPropertyDescriptor: (_, key) => Reflect.getOwnPropertyDescriptor(tgt, key), + getPrototypeOf: () => Reflect.getPrototypeOf(tgt), + deleteProperty: (_, key) => Reflect.deleteProperty(tgt, key), + ownKeys: () => Reflect.ownKeys(tgt), + has: (_, key) => Reflect.has(tgt, key), + set: (_, key, val) => Reflect.set(tgt, key, val), + get: (_, key, receiver) => { + if (key === $Target) + return tgt; // found the 'stop' marker + + if (key === $Inspect || key === 'toJSON') { // two special properties require virtual closures + const own = Object.getOwnPropertyDescriptor(tgt, key); + if (own && isFunction(own.value)) // if object already has its own toJSON, return + return own.value; + + if (!cachedJSON) { // otherwise, create a virtual closure + const result = allObject(receiver); // resolve full-object representation + cachedJSON = () => result; // memoize for subsequent calls + } + + return cachedJSON; // return the memoized closure + } + + const val = Reflect.get(tgt, key, receiver); + return (typeof val === 'function') // if the value is a function + ? val.bind(tgt) // bind it to the target + : val; // else return the value + }, + }) as T +} diff --git a/lib/reflection.library.ts b/packages/shared/src/reflection.library.ts similarity index 100% rename from lib/reflection.library.ts rename to packages/shared/src/reflection.library.ts diff --git a/lib/serialize.library.ts b/packages/shared/src/serialize.library.ts similarity index 99% rename from lib/serialize.library.ts rename to packages/shared/src/serialize.library.ts index 6d3cd06d..2aa53878 100644 --- a/lib/serialize.library.ts +++ b/packages/shared/src/serialize.library.ts @@ -97,7 +97,7 @@ const symKey = /^@(@)?\(([^\)]*)\)$/; // pattern to match a stringify /** reconstruct a Symbol from a string-representation of a key */ function toSymbol(value: PropertyKey) { - const [pat, keyFor, desc] = value.toString().match(symKey) || [null, void 0, void 0]; + const [pat, keyFor, desc] = value.toString().match(symKey) || [null, undefined, undefined]; switch (true) { case isSymbol(value): // already a Symbol @@ -204,7 +204,7 @@ function stringize(obj: T, recurse = true): string { // hide the second par const value = arg.value as any; switch (true) { case !isStringable(value): // Object is not stringify-able - return void 0 as unknown as string; + return undefined as unknown as string; case isFunction(value.toJSON): // Object has its own toJSON method return one(stringize(value.toJSON(), /** replacer */)); diff --git a/lib/storage.library.ts b/packages/shared/src/storage.library.ts similarity index 96% rename from lib/storage.library.ts rename to packages/shared/src/storage.library.ts index d8b1fa59..51bb3843 100644 --- a/lib/storage.library.ts +++ b/packages/shared/src/storage.library.ts @@ -5,7 +5,7 @@ import { isDefined, isUndefined, isString } from '#core/shared/type.library.js'; const context = getContext(); let storage = context.type === CONTEXT.Browser ? context.global?.localStorage //as globalThis.Storage // default to localStorage in a browser - : void 0; + : undefined; /** select local | session storage */ export function selStorage(store: 'local' | 'session' = 'local') { @@ -48,7 +48,7 @@ export function getStorage(key?: string, dflt?: T): T | undefined { /** set / delete storage */ export function setStorage(key: string, val?: T) { - const stash = isDefined(val) ? stringify(val) : void 0; + const stash = isDefined(val) ? stringify(val) : undefined; const set = isDefined(stash); switch (context.type) { diff --git a/lib/string.library.ts b/packages/shared/src/string.library.ts similarity index 98% rename from lib/string.library.ts rename to packages/shared/src/string.library.ts index 286c8cf1..444b43ad 100644 --- a/lib/string.library.ts +++ b/packages/shared/src/string.library.ts @@ -100,9 +100,6 @@ export const makeTemplate = (templateString: Object) => (templateData: Object) => new Function(`{${Object.keys(templateData).join(',')}}`, 'return `' + templateString + '`')(templateData); -/** stringify if not nullish */ -export { asString } from '#core/shared/coercion.library.js'; - export const toLower = (str: T) => isString(str) ? asString(str).toLowerCase().trim() : str; export const toUpper = (str: T) => isString(str) ? asString(str).toUpperCase().trim() : str; diff --git a/lib/type.library.ts b/packages/shared/src/type.library.ts similarity index 94% rename from lib/type.library.ts rename to packages/shared/src/type.library.ts index 1ad8f32a..7bd1b27f 100644 --- a/lib/type.library.ts +++ b/packages/shared/src/type.library.ts @@ -50,7 +50,7 @@ export const isDate = (obj?: T): obj is Extract => isType(obj, 'Date export const isRegExp = (obj?: T): obj is Extract => isType(obj, 'RegExp'); export const isRegExpLike = (obj?: T): obj is Extract => isType(obj, 'String') && /^\/.*\/$/.test(obj as string); export const isSymbol = (obj?: T): obj is Extract => isType(obj, 'Symbol'); -export const isSymbolFor = (obj?: T): obj is Extract => isType(obj, 'Symbol') && Symbol.keyFor(obj) !== void 0; +export const isSymbolFor = (obj?: T): obj is Extract => isType(obj, 'Symbol') && Symbol.keyFor(obj) !== undefined; export const isPropertyKey = (obj?: unknown): obj is PropertyKey => isType(obj, 'String', 'Number', 'Symbol'); export const isNull = (obj?: T): obj is Extract => isType(obj, 'Null'); @@ -59,17 +59,17 @@ export const isUndefined = (obj?: T): obj is undefined => isType(o export const isDefined = (obj: T): obj is NonNullable => !isNullish(obj); export const isClass = (obj?: T): obj is Extract => isType(obj, 'Class'); -export const isFunction = (obj?: any): obj is Function => isType(obj, 'Function', 'AsyncFunction'); +export const isFunction = (obj?: T): obj is Extract => isType(obj, 'Function', 'AsyncFunction'); export const isPromise = (obj?: T): obj is Extract> => isType(obj, 'Promise'); -export const isMap = (obj?: unknown): obj is Map => isType(obj, 'Map'); -export const isSet = (obj?: unknown): obj is Set => isType(obj, 'Set'); -export const isError = (err: unknown): err is Error => isType(err, 'Error'); +export const isMap = (obj?: T): obj is Extract> => isType(obj, 'Map'); +export const isSet = (obj?: T): obj is Extract> => isType(obj, 'Set'); +export const isError = (err?: T): err is Extract => isType(err, 'Error'); export const isTemporal = (obj: T): obj is Extract => protoType(obj).startsWith('Temporal.'); // non-standard Objects -export const isTempo = (obj: unknown): obj is GetType<'Tempo'> => isType(obj, 'Tempo' as any); -export const isEnum = >(obj: unknown): obj is GetType<'Enumify', E> => isType(obj, 'Enumify' as any); -export const isPledge =

(obj: unknown): obj is GetType<'Pledge', P> => isType(obj, 'Pledge' as any); +export const isTempo = (obj?: T): obj is Extract> => isType(obj, 'Tempo' as any); +export const isEnum = >(obj?: T): obj is Extract> => isType(obj, 'Enumify' as any); +export const isPledge = (obj?: T): obj is Extract> => isType(obj, 'Pledge' as any); export const nullToZero = (obj: T) => obj ?? 0; export const nullToEmpty = (obj: T) => obj ?? ''; @@ -137,7 +137,7 @@ export type OneKey = export type Prettify = { [K in keyof T]: T[K]; } & {} export type ParseInt = T extends `${infer N extends number}` ? N : never -export type TPlural = `${T}s`; +export type Plural = `${T}s`; type toName = T extends string ? "String" : @@ -155,7 +155,7 @@ export type Primitives = toName /** Generic constructor type */ export type Constructor = new (...args: any[]) => T; type Instance = { type: string, class: Function } // allow for Class instance re-naming (to avoid minification mangling issues) -declare const Temporal: any; +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ export type Temporals = typeof Temporal extends { Now: any } ? Exclude : never; // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/lib/utility.library.ts b/packages/shared/src/utility.library.ts similarity index 100% rename from lib/utility.library.ts rename to packages/shared/src/utility.library.ts diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json new file mode 100644 index 00000000..9e53a248 --- /dev/null +++ b/packages/shared/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "composite": true + }, + "include": [ + "src/**/*.ts", + "../../packages/tempo/src/temporal.global.d.ts" + ] +} \ No newline at end of file diff --git a/packages/shared/tsconfig.tsbuildinfo b/packages/shared/tsconfig.tsbuildinfo new file mode 100644 index 00000000..3bd7831e --- /dev/null +++ b/packages/shared/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es5.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2016.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.dom.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.iterator.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.date.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.error.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.temporal.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.decorators.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/tslib/tslib.d.ts","../../node_modules/tslib/modules/index.d.ts","./src/type.library.ts","./src/reflection.library.ts","./src/utility.library.ts","./src/function.library.ts","./src/serialize.library.ts","./src/coercion.library.ts","./src/object.library.ts","./src/array.library.ts","./src/buffer.library.ts","./src/number.library.ts","./src/class.library.ts","./src/cipher.class.ts","./src/proxy.library.ts","./src/enumerate.library.ts","./src/logify.class.ts","./src/string.library.ts","./src/pledge.class.ts","./src/prototype.library.ts","./src/storage.library.ts","./src/index.ts","../../node_modules/@js-temporal/polyfill/index.d.ts","../tempo/src/temporal.global.d.ts","../../node_modules/@js-temporal/polyfill/index.d.cts"],"fileIdsList":[[89],[90,91,92,95,96,97,104,107],[90],[90,95,96,99,100,101],[90,91,92,95,104,107],[90,91,95,104,107],[90,91,92,93,94,95,101,103,104,107],[90,91,93,104,107],[90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109],[90,91,101,104,107],[90,91,96,104,107],[90,91,92,104,107],[90,91,93,95,96,97,101,104,105,106,107],[90,91,96,98,104,106,107],[90,91,92,93,104,107],[90,91,104,107],[90,91,92,94,104,107],[90,91,93,95,104,107],[90,91,95,96,104,107],[111]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b8f34dd1757f68e03262b1ca3ddfa668a855b872f8bdd5224d6f993a7b37dc2c","impliedFormat":99},{"version":"72aff3c112768314654fe1583a54614f0bcc2a985aa8d1f2a334313321212772","signature":"684d391ca510d78e22084e58d12c5a19659f1e2765c1f85fe05a4aa8281ec863","impliedFormat":99},{"version":"d88ce4b739fc4799331e4b828e83a8616bff51ab9190a168623e38849658b317","signature":"d22478eed6469d7d11575986ff38d0942e7981a516b934a21b399c75df13a559","impliedFormat":99},{"version":"dc52a3606fd6b6c6b583a796c7841651ddb47e951325498a23828d70ef8570ff","signature":"46a3b3f6611b31bdbb24f6ea6291ff64aaafe3d3eb189f2ed786962d964fc736","impliedFormat":99},{"version":"e6e41db4718e8730f7e2f1d0be01ae13c99b531f9d4b3b9930e1a0f79dd18728","signature":"04608b30cb34a5e2f171500a628340d81b2898b3e5b247a0ed9b5c83c382d14c","impliedFormat":99},{"version":"3315d9a9e0da4fed057fcfb361053e7f1c9e65d2c2d0ab994f19a1ae3f671ad1","signature":"b57f30b23f87cd3438dc2dadcc99f33c8e4947d5448be1ce86c43e96af2c7c65","impliedFormat":99},{"version":"61e23c577bd0e71dd7461348462eab83b0661fa4a283b83ea384cea68bb360f0","signature":"3a767818046085b8646ddaeedc55a76712b84b9e679c31597fecd3b0f812932b","impliedFormat":99},{"version":"67c5531cfc3e3203ea4858d83a09928e451df11edec728ec8b52ed00efceaff3","signature":"a162bb04720e622ea27f40b8b459e9c218fb951e02cf8cd790d3e56b762c2835","impliedFormat":99},{"version":"6666ce9ee076c7f638d0ff3164c48522232cd2e0e31e0e17472a7a4d2d2ecb52","signature":"f78a519adc9225a301abdf34927bfe61f391db27d941fabb80a01e761b530e65","impliedFormat":99},{"version":"736a148b81a47cf628e5488cf149f4c6b91641eb3d570a5404b63538d9e49cda","signature":"b60a94d5200c1acd31f4f05a289e3b53430b3426a6f092870525ac2e63677f8a","impliedFormat":99},{"version":"d4688f4bd90c93b13fd13f7d080f62173fe63b71562edfad557b7cd784eabbce","signature":"d666ac04d2db63d69bf6ac392465ca2d8374f1263a3143e691e2c418042cb0d7","impliedFormat":99},{"version":"a272039396c9351c6f2faa0f69ef582be255bf2868474a0f9b3cf588d7504fe9","signature":"0bf02d7dd7989531b513816609974767366309413fdd2f6d4d4f4164df7edcce","impliedFormat":99},{"version":"a7bd2411ec96ffc97c14489a307e3565aa86cbc159fc14da03e2c4d416c8a5d4","signature":"1de326f9d01673c7153b2d3b8737463700fdcfd9c9e2e0ecd278b638071ba7e6","impliedFormat":99},{"version":"3c1ee462fe8c843b0c84fe23b61880a4132c5a44c70a0352a3937d6e29505896","signature":"5ed2c72912aa59f7409365cd62fe3405ba890b79b1c7f6cda22951ae309ecc55","impliedFormat":99},{"version":"244b004efe430fe4104cde7003f3ace2f50b512f8511e8a8b0a0e7f58cb64df3","signature":"661ae81ad9a030b4c21e0868a6562983c839f0a3c34113ed8156316371759b7e","impliedFormat":99},{"version":"86a22977b9669fe229d70721749f39e12bcc1ec82d1517f46dcd5b75dd50ff8c","signature":"8d29a7ddd9b8b7328ecf7c7f8e0b64521cc4c3d57cd99aad373687a892d77f5f","impliedFormat":99},{"version":"1fdcfe9f9e325aeffa2110135ef74a6fd89d0b1163b86962529aa859a234a803","signature":"48702c29ab45c6d3088024ef92b42fcff0bcaabd4fefad39229ae14d042c2dd3","impliedFormat":99},{"version":"2beda1c7bec2c8041ad24fe5ca2449fecdabc3c9d02f9e86ffc5065f2a65cc2f","signature":"7896e0221ce63fa76a0f1186ddd0bf99e82a361ccde6316cebb869c9ce50bbf4","impliedFormat":99},{"version":"d3c0082351bfd1a3e291257a036a59c4e25c5e88c77979ce641a75583bb43b2e","signature":"dd4caebeb46431cd248d5dc6c55f11ebe3dc88bcbcf37c1110b97d9f7adc08f7","affectsGlobalScope":true,"impliedFormat":99},{"version":"f33de9eb5d1ece5b8f0d4c6aa4d42603293588128ef51f23218a532132dda188","signature":"e9fac1bbc35989dcb29a8be6ed14fcba5606b6528b817f3a20ce78a115d4f33e","impliedFormat":99},{"version":"03bfddfc1240c31aa2f19c91eab048918d8adae71061cc53d913900081f7cea3","impliedFormat":99},{"version":"893fbc7e2a50a3a780d3d6eb6899e45fe8dc4ca56708770b4731e481f55af599","impliedFormat":99},{"version":"2b38ae82df529a9d125662fc7b71f3204cb9e8f3160a2497db7808c74050c18f","affectsGlobalScope":true,"impliedFormat":99},{"version":"893fbc7e2a50a3a780d3d6eb6899e45fe8dc4ca56708770b4731e481f55af599","impliedFormat":1}],"root":[[91,110],112],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"exactOptionalPropertyTypes":false,"importHelpers":true,"module":199,"noImplicitAny":true,"noImplicitReturns":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[90,1],[98,2],[99,3],[102,4],[101,5],[96,6],[104,7],[94,8],[110,9],[105,10],[100,11],[97,12],[107,13],[108,14],[103,15],[92,16],[95,17],[109,18],[106,19],[91,3],[93,12],[112,20]],"latestChangedDtsFile":"./dist/index.d.ts","version":"6.0.1-rc"} \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.d.ts new file mode 100644 index 00000000..c45fc4b9 --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.d.ts @@ -0,0 +1,5 @@ +export * from './tempo.class.js'; +export * as enums from './tempo.config/tempo.enum.js'; +export * from '#core/shared/pledge.class.js'; +export * from '#core/shared/serialize.library.js'; +export * from '#core/shared/enumerate.library.js'; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js new file mode 100644 index 00000000..e710e659 --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js @@ -0,0 +1,6 @@ +export * from './tempo.class.js'; // Temporal wrapper +export * as enums from './tempo.config/tempo.enum.js'; +export * from '#core/shared/pledge.class.js'; // Promise wrapper +export * from '#core/shared/serialize.library.js'; // stringify, objectify, cloneify functions +export * from '#core/shared/enumerate.library.js'; // enumify function +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js.map b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js.map new file mode 100644 index 00000000..d6541e0b --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC,CAAc,mBAAmB;AAClE,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AAEtD,cAAc,8BAA8B,CAAC,CAAW,kBAAkB;AAC1E,cAAc,mCAAmC,CAAC,CAAQ,2CAA2C;AACrG,cAAc,mCAAmC,CAAC,CAAQ,mBAAmB"} \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.d.ts new file mode 100644 index 00000000..276e2127 --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.d.ts @@ -0,0 +1,666 @@ +import '#core/shared/temporal.polyfill.js'; +import type { IntRange, LooseUnion, Mutable, NonOptional, OwnOf, Property, TPlural, Type } from '#core/shared/type.library.js'; +import type { Enum } from '#core/shared/enumerate.library.js'; +import * as enums from '#core/tempo.config/tempo.enum.js'; +import { Token, Snippet, Layout, Event, Period } from '#core/tempo.config/tempo.default.js'; +import '#core/shared/prototype.library.js'; +declare module '#core/shared/type.library.js' { + interface TypeValueMap { + Tempo: { + type: 'Tempo'; + value: Tempo; + }; + } +} +/** key to use for storage / globalThis Symbol */ export declare const $Tempo: unique symbol; +/** + * # Tempo + * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. + * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. + */ +export declare class Tempo { + #private; + /** Weekday names (short-form) */ static get WEEKDAY(): Enum.wrap>; + /** Weekday names (long-form) */ static get WEEKDAYS(): Enum.wrap>; + /** Month names (short-form) */ static get MONTH(): Enum.wrap>; + /** Month names (long-form) */ static get MONTHS(): Enum.wrap>; + /** Time durations as seconds (singular) */ static get DURATION(): Enum.wrap<{ + readonly year: 31536000; + readonly month: 2628000; + readonly week: 604800; + readonly day: 86400; + readonly hour: 3600; + readonly minute: 60; + readonly second: 1; + readonly millisecond: 0.001; + readonly microsecond: 0.000001; + readonly nanosecond: 1e-9; + }>; + /** Time durations as milliseconds (plural) */ static get DURATIONS(): Enum.wrap<{ + readonly years: number; + readonly months: number; + readonly weeks: number; + readonly days: number; + readonly hours: number; + readonly minutes: number; + readonly seconds: number; + readonly milliseconds: number; + readonly microseconds: number; + readonly nanoseconds: number; + }>; + /** Quarterly Seasons */ static get SEASON(): Enum.wrap<{ + readonly Summer: "summer"; + readonly Autumn: "autumn"; + readonly Winter: "winter"; + readonly Spring: "spring"; + }>; + /** Compass cardinal points */ static get COMPASS(): Enum.wrap<{ + readonly North: "north"; + readonly East: "east"; + readonly South: "south"; + readonly West: "west"; + }>; + /** Tempo to Temporal DateTime Units map */ static get ELEMENT(): Enum.wrap<{ + readonly yy: "year"; + readonly mm: "month"; + readonly ww: "week"; + readonly dd: "day"; + readonly hh: "hour"; + readonly mi: "minute"; + readonly ss: "second"; + readonly ms: "millisecond"; + readonly us: "microsecond"; + readonly ns: "nanosecond"; + }>; + /** Pre-configured format {name -> string} pairs */ static get FORMAT(): Tempo.Format; + /** some useful Dates */ static get LIMIT(): import("#core/shared/type.library.js").SecureObject<{ + readonly maxTempo: any; + readonly minTempo: any; + }>; + /** + * Bootstrap the library with a Custom Global Discovery object. + * + * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern + * and automatically calls `Tempo.init()` to apply the discovered configuration. + * + * @param config - The Global Discovery object to register. + * @returns The resolved global configuration. + */ + static discover(config: Tempo.Discovery): { + [key: string]: any; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + timeZone: Temporal.TimeZoneLike; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + anchor: Temporal.ZonedDateTime; + }; + /** + * Initializes the global default configuration for all subsequent `Tempo` instances. + * + * Settings are inherited in this priority: + * 1. Reasonable library defaults (defined in tempo.config.js) + * 2. Persistent storage (e.g. localStorage), if available. + * 3. `options` provided to this method. + * + * @param options - Configuration overrides to apply globally. + * @returns The resolved global configuration. + */ + static init(options?: Tempo.Options): { + [key: string]: any; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + timeZone: Temporal.TimeZoneLike; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + anchor: Temporal.ZonedDateTime; + }; + /** release global config and reset library to defaults */ + static [Symbol.dispose](): void; + /** + * Extends the Tempo class with new functionality. + * Plugins can add static or instance methods to the library. + */ + static extend(plugin: Tempo.Plugin, options?: any): typeof Tempo; + /** Reads options from persistent storage (e.g., localStorage). */ + static readStore(key?: string): Tempo.Options; + /** Writes configuration into persistent storage. */ + static writeStore(config?: Tempo.Options, key?: string): void; + /** lookup or registers a new `Symbol` for a given key. */ + static getSymbol(key?: string | symbol): symbol; + /** translates {layout} into an anchored, case-insensitive RegExp. */ + static regexp(layout: string | RegExp, snippet?: Snippet): RegExp; + /** Compares two `Tempo` instances or date-time values. */ + static compare(tempo1?: Tempo.DateTime | Tempo.Options, tempo2?: Tempo.DateTime | Tempo.Options): number; + /** global Tempo configuration */ + static get config(): { + [key: string]: any; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + timeZone: Temporal.TimeZoneLike; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + anchor: Temporal.ZonedDateTime; + }; + /** global discovery configuration */ + static get discovery(): any; + /** + * Returns a snapshot of the configuration layers used by Tempo. + * Useful for debugging how the final configuration is built. + */ + static get options(): { + default: import("#core/shared/type.library.js").SecureObject<{ + readonly scope: "default"; + readonly timeZone: import("#core/shared/type.library.js").Extend<{ + readonly utc: "UTC"; + readonly gmt: "Europe/London"; + readonly est: "America/New_York"; + readonly cst: "America/Chicago"; + readonly mst: "America/Denver"; + readonly pst: "America/Los_Angeles"; + readonly aest: "Australia/Sydney"; + readonly acst: "Australia/Adelaide"; + readonly awst: "Australia/Perth"; + readonly nzt: "Pacific/Auckland"; + readonly cet: "Europe/Paris"; + readonly eet: "Europe/Helsinki"; + readonly ist: "Asia/Kolkata"; + readonly npt: "Asia/Kathmandu"; + readonly jst: "Asia/Tokyo"; + }, string, string>; + readonly store?: string | undefined; + readonly discovery?: string | undefined; + readonly debug?: boolean | undefined; + readonly catch?: boolean | undefined; + readonly calendar?: Temporal.CalendarLike; + readonly locale?: string | undefined; + readonly pivot?: number | undefined; + readonly sphere?: Tempo.COMPASS | undefined; + readonly timeStamp?: Tempo.TimeStamp | undefined; + readonly mdyLocales?: string | import("#core/shared/type.library.js").SecureArray | undefined; + readonly mdyLayouts?: import("#core/shared/type.library.js").SecureArray | undefined; + readonly snippet?: string | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; + readonly layout?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | undefined; + readonly event?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject any; + readonly today: (this: any) => any; + readonly tomorrow: (this: any) => any; + readonly yesterday: (this: any) => any; + }, string, string | Function>> | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; + readonly period?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | undefined; + readonly formats?: import("#core/shared/type.library.js").SecureObject> | undefined; + readonly plugins?: Tempo.Plugin | import("#core/shared/type.library.js").SecureArray | undefined; + readonly value?: Tempo.DateTime; + readonly anchor?: Temporal.ZonedDateTime; + }>; + discovery: any; + storage: { + key: string; + scope: string; + } & Partial & Record; + global: { + [key: string]: any; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + timeZone: Temporal.TimeZoneLike; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + anchor: Temporal.ZonedDateTime; + }; + }; + /** Creates a new `Tempo` instance. */ + static from(options?: Tempo.Options): Tempo; + static from(tempo: Tempo.DateTime | undefined, options?: Tempo.Options): Tempo; + static now(): any; + /** static Tempo.terms getter */ + static get terms(): import("#core/shared/type.library.js").SecureArray<{ + key: string; + scope?: string; + description: string; + }>; + /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ + static addTerm(...plugin: Tempo.TermPlugin[]): void; + /** static Tempo properties getter */ + static get properties(): import("#core/shared/type.library.js").SecureArray; + /** Tempo initial default settings */ + static get default(): import("#core/shared/type.library.js").SecureObject<{ + readonly scope: "default"; + readonly timeZone: import("#core/shared/type.library.js").Extend<{ + readonly utc: "UTC"; + readonly gmt: "Europe/London"; + readonly est: "America/New_York"; + readonly cst: "America/Chicago"; + readonly mst: "America/Denver"; + readonly pst: "America/Los_Angeles"; + readonly aest: "Australia/Sydney"; + readonly acst: "Australia/Adelaide"; + readonly awst: "Australia/Perth"; + readonly nzt: "Pacific/Auckland"; + readonly cet: "Europe/Paris"; + readonly eet: "Europe/Helsinki"; + readonly ist: "Asia/Kolkata"; + readonly npt: "Asia/Kathmandu"; + readonly jst: "Asia/Tokyo"; + }, string, string>; + readonly store?: string | undefined; + readonly discovery?: string | undefined; + readonly debug?: boolean | undefined; + readonly catch?: boolean | undefined; + readonly calendar?: Temporal.CalendarLike; + readonly locale?: string | undefined; + readonly pivot?: number | undefined; + readonly sphere?: Tempo.COMPASS | undefined; + readonly timeStamp?: Tempo.TimeStamp | undefined; + readonly mdyLocales?: string | import("#core/shared/type.library.js").SecureArray | undefined; + readonly mdyLayouts?: import("#core/shared/type.library.js").SecureArray | undefined; + readonly snippet?: string | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; + readonly layout?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | undefined; + readonly event?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject any; + readonly today: (this: any) => any; + readonly tomorrow: (this: any) => any; + readonly yesterday: (this: any) => any; + }, string, string | Function>> | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; + readonly period?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | undefined; + readonly formats?: import("#core/shared/type.library.js").SecureObject> | undefined; + readonly plugins?: Tempo.Plugin | import("#core/shared/type.library.js").SecureArray | undefined; + readonly value?: Tempo.DateTime; + readonly anchor?: Temporal.ZonedDateTime; + }>; + /** + * configuration governing the static 'rules' used when parsing Tempo.DateTime argument + */ + static get parse(): Tempo.Parse; + /** iterate over Tempo properties */ + static [Symbol.iterator](): ArrayIterator; + /** allow for auto-convert of Tempo to BigInt, Number or String */ + [Symbol.toPrimitive](hint?: 'string' | 'number' | 'default'): any; + /** iterate over instance formats */ + [Symbol.iterator](): ArrayIterator>; + get [Symbol.toStringTag](): string; + /** + * Instantiates a new `Tempo` object. + * + * @param tempo - The date-time value to parse. Can be a string, number, BigInt, Date, or another Tempo/Temporal object. + * @param options - Configuration options for this specific instance. + */ + constructor(options?: Tempo.Options); + constructor(tempo: Tempo.DateTime, options?: Tempo.Options); + /** 4-digit year (e.g., 2024) */ get yy(): any; + /** 4-digit ISO week-numbering year */ get wy(): any; + /** Month number: Jan=1, Dec=12 */ get mm(): Tempo.mm; + /** ISO week number of the year */ get ww(): Tempo.ww; + /** Day of the month (1-31) */ get dd(): any; + /** Day of the month (alias for `dd`) */ get day(): any; + /** Hour of the day (0-23) */ get hh(): Tempo.hh; + /** Minutes of the hour (0-59) */ get mi(): Tempo.mi; + /** Seconds of the minute (0-59) */ get ss(): Tempo.ss; + /** Milliseconds of the second (0-999) */ get ms(): Tempo.ms; + /** Microseconds of the millisecond (0-999) */ get us(): Tempo.us; + /** Nanoseconds of the microsecond (0-999) */ get ns(): Tempo.ns; + /** Fractional seconds (e.g., 0.123456789) */ get ff(): number; + /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz(): any; + /** Unix timestamp (defaults to milliseconds) */ get ts(): any; + /** Short month name (e.g., 'Jan') */ get mmm(): "All" | "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec"; + /** Full month name (e.g., 'January') */ get mon(): "May" | "Every" | "January" | "February" | "March" | "April" | "June" | "July" | "August" | "September" | "October" | "November" | "December"; + /** Short weekday name (e.g., 'Mon') */ get www(): "All" | "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun"; + /** Full weekday name (e.g., 'Monday') */ get wkd(): "Everyday" | "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday"; + /** ISO weekday number: Mon=1, Sun=7 */ get dow(): Tempo.Weekday; + /** Nanoseconds since Unix epoch (BigInt) */ get nano(): any; + /** current Tempo configuration */ + get config(): { + [key: string]: any; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + timeZone: Temporal.TimeZoneLike; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + anchor: Temporal.ZonedDateTime; + }; + /** Instance-specific parse rules (merged with global) */ get parse(): Tempo.Parse; + /** Object containing results from all term plugins */ get term(): Tempo.Terms; + /** Formatted results for all pre-defined format codes */ get fmt(): Tempo.Formats; + /** units since epoch */ get epoch(): import("#core/shared/type.library.js").SecureObject<{ + /** seconds since epoch */ readonly ss: number; + /** milliseconds since epoch */ readonly ms: any; + /** microseconds since epoch */ readonly us: number; + /** nanoseconds since epoch */ readonly ns: any; + }>; + /** time duration until (with unit, returns number) */ until(until: Tempo.Until, opts?: Tempo.Options): number; + /** time duration until another date-time (with unit) */ until(dateTimeOrOpts: Tempo.DateTime | Tempo.Options, until: Tempo.Until): number; + /** time duration until (returns Duration) */ until(dateTimeOrOpts?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options): Tempo.Duration; + /** time elapsed since (with unit) */ since(until: Tempo.Until, opts?: Tempo.Options): string; + /** time elapsed since another date-time (with unit) */ since(dateTimeOrOpts: Tempo.DateTime | Tempo.Options, until: Tempo.Until): string; + /** time elapsed since (without unit) */ since(dateTimeOrOpts?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options): string; + /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt: K): Tempo.FormatType; + /** returns a new `Tempo` with specific duration added. */ add(tempo?: Tempo.DateTime | Tempo.Options, options?: Tempo.Options): Tempo; + /** returns a new `Tempo` with specific offsets. */ set(tempo?: Tempo.DateTime | Tempo.Options, options?: Tempo.Options): Tempo; + /** returns a clone of the current `Tempo` instance. */ clone(): Tempo; + /** returns the underlying Temporal.ZonedDateTime */ toDateTime(): any; + /** returns a Temporal.PlainDate representation */ toPlainDate(): any; + /** returns a Temporal.PlainTime representation */ toPlainTime(): any; + /** returns a Temporal.PlainDateTime representation */ toPlainDateTime(): any; + /** returns the underlying Temporal.Instant */ toInstant(): any; + /** the date-time as a standard `Date` object. */ toDate(): Date; + /** the ISO8601 string representation of the date-time. */ toString(): any; + /** Custom JSON serialization for `JSON.stringify`. */ toJSON(): { + value: any; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + timeZone: Temporal.TimeZoneLike; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + anchor: Temporal.ZonedDateTime; + }; + /** `true` if the underlying date-time is valid. */ isValid(): boolean; +} +export declare namespace Tempo { + /** the value that Tempo will attempt to interpret as a valid ISO date / time */ + export type DateTime = string | number | bigint | Date | Tempo | typeof Temporal | Temporal.ZonedDateTimeLike | undefined | null; + export type Pattern = string | RegExp; + export type Logic = string | number | Function; + export type Pair = [string, string]; + export type Groups = Record; + export type Registry = Map; + export type PatternOption = T | Record | PatternOption[]; + /** the Options object found in a config-module, or passed to a call to Tempo.init({}) or 'new Tempo({})' */ + export interface BaseOptions { + /** localStorage key */ store: string; + /** globalThis Discovery Symbol */ discovery: string; + /** additional console.log for tracking */ debug: boolean | undefined; + /** catch or throw Errors */ catch: boolean | undefined; + /** Temporal timeZone */ timeZone: Temporal.TimeZoneLike; + /** Temporal calendar */ calendar: Temporal.CalendarLike; + /** locale (e.g. en-AU) */ locale: string; + /** pivot year for two-digit years */ pivot: number; + /** hemisphere for term.qtr or term.szn */ sphere: Tempo.COMPASS | undefined; + /** granularity of timestamps (ms | ns) */ timeStamp: Tempo.TimeStamp; + /** locale-names that prefer 'mm-dd-yy' date order */ mdyLocales: string | string[]; + /** swap parse-order of layouts */ mdyLayouts: Tempo.Pair[]; + /** date-time snippets to help compose a Layout */ snippet: Snippet | Tempo.PatternOption; + /** patterns to help parse value */ layout: Layout | Tempo.PatternOption; + /** custom date aliases (events). */ event: Event | Tempo.PatternOption; + /** custom time aliases (periods). */ period: Period | Tempo.PatternOption; + /** custom format strings to merge in the FORMAT enum */ formats: Property; + /** plugins to be automatically Extended via Tempo.extend() */ plugins: Plugin | Plugin[]; + /** supplied value to parse */ value: Tempo.DateTime; + /** @internal temporary anchor used during parsing */ anchor: Temporal.ZonedDateTime; + } + export type Options = Partial & Record; + /** define a new term plugin */ + export type TermPlugin = { + key: string; + scope?: string; + description: string; + define: (this: Tempo, keyOnly?: boolean) => any; + }; + /** plugin function that can extend the Tempo prototype or static space */ + export type Plugin = (options: any, TempoClass: typeof Tempo, factory: (val: any) => Tempo) => void; + /** internal metadata for a plugin to track installation */ + export interface PluginContainer extends Plugin { + installed?: boolean; + } + /** the encapsulated state of a Tempo instance */ + export interface State { + /** current defaults for all Tempo instances */ config: Tempo.Config; + /** parsing rules */ parse: Tempo.Parse; + } + /** Debugging results of a parse operation. See `doc/tempo.api.md`. */ + export interface Parse { + /** Locales which prefer 'mm-dd-yyyy' date-order */ mdyLocales: { + locale: string; + timeZones: string[]; + }[]; + /** Layout names that are switched to mdy */ mdyLayouts: Tempo.Pair[]; + /** is a timeZone that prefers 'mmddyyyy' date order */ isMonthDay?: boolean; + /** Symbol registry */ token: Token; + /** Tempo snippets to aid in parsing */ snippet: Snippet; + /** Tempo layout strings */ layout: Layout; + /** Map of regex-patterns to match input-string */ pattern: Tempo.Registry; + /** configured Events */ event: Event; + /** configured Periods */ period: Period; + /** pivot year for two-digit years */ pivot?: number; + /** parsing match result */ result: Tempo.Match[]; + } + /** debug a Tempo instantiation */ + export interface Match { + /** pattern which matched the input */ match?: string | undefined; + /** groups from the pattern match */ groups?: Tempo.Groups; + /** the type of the original input */ type: LooseUnion; + /** the value of the original input */ value: any; + /** was this a nested/anchored parse? */ isAnchored?: boolean; + } + /** drop the parse-only Options */ + type OptionsKeep = Omit; + /** Instance configuration derived from supply, storage, and discovery. */ + export interface Config extends Required> { + /** configuration (global | local) */ scope: 'global' | 'local'; + /** pre-configured format strings */ formats: Format; + [key: string]: any; + } + /** Timestamp precision */ + export type TimeStamp = 'ss' | 'ms' | 'us' | 'ns'; + /** structured configuration for Global Discovery via Symbol.for('$Tempo') */ + export interface Discovery { + /** pre-defined config options for Tempo.#global */ options?: Options | (() => Options); + /** term plugins to be registered via Tempo.addTerm() */ terms?: TermPlugin | TermPlugin[]; + /** aliases to merge in the TimeZone dictionary */ timeZones?: Record; + /** custom format strings to merge in the FORMAT dictionary */ formats?: Property; + /** plugins to be automatically extended via Tempo.extend() */ plugins?: Plugin | Plugin[]; + } + /** Configuration to use for #until() and #since() argument */ + export type Unit = Temporal.DateUnit | Temporal.TimeUnit | TPlural; + export type Until = (Tempo.Options & { + unit?: Tempo.Unit; + }) | Tempo.Unit; + export type Mutate = 'start' | 'mid' | 'end'; + export type Set = Partial & Record<'date' | 'time' | 'event' | 'period', string> & { + timeZone?: Temporal.TimeZoneLike; + calendar?: Temporal.CalendarLike; + }>; + export type Add = Partial>; + /** pre-configured format strings */ + export type OwnFormat = Mutable>; + /** mapping of format names to instance-resolutions (string | number) */ + export type Formats = { + [K in keyof OwnFormat]: FormatType; + } & Record; + /** Enum registry of format strings */ + export type Format = Enum.wrap>; + /** mapping of terms to their resolved values */ + export type Terms = Property; + /** patterns that return a number */ + export type NumericPattern = '{yyyy}{mm}' | '{yyww}' | '{yyyy}{mm}{dd}' | '{wy}{ww}' | '{wy}'; + export type FormatType = K extends keyof OwnFormat ? (OwnFormat[K] extends NumericPattern ? number : string) : K extends NumericPattern ? number : string | number; + export type Modifier = '=' | '-' | '+' | '<' | '<=' | '-=' | '>' | '>=' | '+=' | 'this' | 'next' | 'prev' | 'last' | 'first' | undefined; + export type Relative = 'ago' | 'hence' | 'prior'; + export type mm = IntRange<0, 12>; + export type hh = IntRange<0, 24>; + export type mi = IntRange<0, 60>; + export type ss = IntRange<0, 60>; + export type ms = IntRange<0, 999>; + export type us = IntRange<0, 999>; + export type ns = IntRange<0, 999>; + export type ww = IntRange<1, 53>; + export type Duration = NonOptional & Record<"iso", string> & Record<"sign", number> & Record<"blank", boolean> & Record<"unit", string | undefined>; + export type WEEKDAY = enums.WEEKDAY; + export type WEEKDAYS = enums.WEEKDAYS; + export type MONTH = enums.MONTH; + export type MONTHS = enums.MONTHS; + export type DURATION = enums.DURATION; + export type DURATIONS = enums.DURATIONS; + export type COMPASS = enums.COMPASS; + export type ELEMENT = enums.ELEMENT; + export type Weekday = enums.Weekday; + export type Month = enums.Month; + export type Element = enums.Element; + /** Type for consistency in expected arguments for helper functions */ + export type Params = { + (tempo?: Tempo.DateTime, options?: Tempo.Options): T; + (options: Tempo.Options): T; + }; + export {}; +} +type Fmt = { + (fmt: F, tempo?: Tempo.DateTime, options?: Tempo.Options): Tempo.FormatType; + (fmt: F, options: Tempo.Options): Tempo.FormatType; +}; +/** check valid Tempo */ export declare const isTempo: (tempo?: unknown) => tempo is Tempo; +/** current timestamp (ts) */ export declare const getStamp: Tempo.Params; +/** create new Tempo */ export declare const getTempo: Tempo.Params; +/** format a Tempo */ export declare const fmtTempo: Fmt; +export {}; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js new file mode 100644 index 00000000..61f63ccf --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js @@ -0,0 +1,1543 @@ +import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from "tslib"; +import '#core/shared/temporal.polyfill.js'; // side-effect runtime check for Temporal +// #region library modules~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +import { Logify } from '#core/shared/logify.class.js'; +import { ifDefined } from '#core/shared/object.library.js'; +import { secure } from '#core/shared/utility.library.js'; +import { Immutable, Serializable } from '#core/shared/class.library.js'; +import { asArray } from '#core/shared/array.library.js'; +import { cleanify, stringify } from '#core/shared/serialize.library.js'; +import { getStorage, setStorage } from '#core/shared/storage.library.js'; +import { ownKeys, ownEntries, getAccessors, omit } from '#core/shared/reflection.library.js'; +import { getProxy } from '#core/shared/proxy.library.js'; +import { getContext, CONTEXT } from '#core/shared/utility.library.js'; +import { asNumber, asInteger, isNumeric, ifNumeric } from '#core/shared/number.library.js'; +import { pad, singular, toProperCase, trimAll } from '#core/shared/string.library.js'; +import { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#core/shared/type.library.js'; +import * as enums from '#core/tempo.config/tempo.enum.js'; +import registerTerms from '#core/tempo.config/terms/term.import.js'; +import { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#core/tempo.config/tempo.default.js'; +import '#core/shared/prototype.library.js'; // patch prototypes +// #region Const variables +/** key to use for storage / globalThis Symbol */ export const $Tempo = Symbol.for('$Tempo'); +/** current execution context*/ const Context = getContext(); +// #endregion Const variables +/** + * # Tempo + * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. + * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. + */ +let Tempo = (() => { + var _a, _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_conformToGroups; + let _classDecorators = [Serializable, Immutable]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + var Tempo = _a = class { + static { _classThis = this; } + static { __setFunctionName(this, "Tempo"); } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + Tempo = _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + } + // #region Static enum properties~~~~~~~~~~~~~~~~~~~~~~~~~ + /** Weekday names (short-form) */ static get WEEKDAY() { return enums.WEEKDAY; } + /** Weekday names (long-form) */ static get WEEKDAYS() { return enums.WEEKDAYS; } + /** Month names (short-form) */ static get MONTH() { return enums.MONTH; } + /** Month names (long-form) */ static get MONTHS() { return enums.MONTHS; } + /** Time durations as seconds (singular) */ static get DURATION() { return enums.DURATION; } + /** Time durations as milliseconds (plural) */ static get DURATIONS() { return enums.DURATIONS; } + /** Quarterly Seasons */ static get SEASON() { return enums.SEASON; } + /** Compass cardinal points */ static get COMPASS() { return enums.COMPASS; } + /** Tempo to Temporal DateTime Units map */ static get ELEMENT() { return enums.ELEMENT; } + /** Pre-configured format {name -> string} pairs */ static get FORMAT() { return __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.formats; } + /** some useful Dates */ static get LIMIT() { return enums.LIMIT; } + static { + // #endregion + // #region Static private properties~~~~~~~~~~~~~~~~~~~~~~ + _Tempo_dbg = { value: new Logify('Tempo', { + debug: Default?.debug ?? false, + catch: Default?.catch ?? false + }) }; + } + static { + /** Tempo state for the global configuration */ _Tempo_global = { value: {} }; + } + static { + /** a collection of parse rule-matches */ _Tempo_pending = { value: void 0 }; + } + static { + /** cache for next-available 'usr' Token key */ _Tempo_usrCount = { value: 0 }; + } + static { + /** mutable list of registered term plugins */ _Tempo_terms = { value: [] }; + } + static { + /** try to infer hemisphere using the timezone's daylight-savings setting */ + _Tempo_setSphere = { value: (shape, options) => { + if (isUndefined(shape.config.timeZone) || __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, options, 'sphere')) + return shape.config.sphere; // already specified or no timeZone to calculate from + // use a fixed date (2024-01-01) to compare offsets for hemisphere detection + const zdt = new Temporal.ZonedDateTime(BigInt(1_704_067_200) * BigInt(1_000_000_000), shape.config.timeZone); + const jan = zdt.with({ day: 1, month: 1 }).offsetNanoseconds; + const jun = zdt.with({ day: 1, month: 6 }).offsetNanoseconds; + const dst = Math.sign(jan - jun); // timeZone offset difference between Jan and Jun + switch (dst) { + case -1: + return Tempo.COMPASS.North; // clock moves backward in Northern hemisphere + case 1: + return Tempo.COMPASS.South; // clock moves forward in Southern hemisphere + case 0: + default: + return void 0; // timeZone does not observe DST + } + } }; + } + static { + /** properCase week-day / calendar-month */ + _Tempo_prefix = { value: (str) => toProperCase(String(str).substring(0, 3)) }; + } + static { + /** get first Canonical name of a supplied locale */ + _Tempo_locale = { value: (locale) => { + let language; + try { // lookup locale + language = Intl.getCanonicalLocales(locale.replace('_', '-'))[0]; + } + catch (error) { } // catch unknown locale + const global = Context.global; + return language ?? + global?.navigator?.languages?.[0] ?? // fallback to current first navigator.languages[] + global?.navigator?.language ?? // else navigator.language + Default.locale ?? // else default locale + locale; // cannot determine locale + } }; + } + // #endregion Static private methods + // #region Static public methods~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** + * Bootstrap the library with a Custom Global Discovery object. + * + * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern + * and automatically calls `Tempo.init()` to apply the discovered configuration. + * + * @param config - The Global Discovery object to register. + * @returns The resolved global configuration. + */ + static discover(config) { + globalThis[$Tempo] = config; + return this.init(); + } + /** + * Initializes the global default configuration for all subsequent `Tempo` instances. + * + * Settings are inherited in this priority: + * 1. Reasonable library defaults (defined in tempo.config.js) + * 2. Persistent storage (e.g. localStorage), if available. + * 3. `options` provided to this method. + * + * @param options - Configuration overrides to apply globally. + * @returns The resolved global configuration. + */ + static init(options = {}) { + if (isEmpty(options)) { // if no options supplied, reset all + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse = { + snippet: Object.assign({}, Snippet), + layout: Object.assign({}, Layout), + event: Object.assign({}, Event), + period: Object.assign({}, Period), + mdyLocales: __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_mdyLocales).call(Tempo, Default.mdyLocales), + mdyLayouts: asArray(Default.mdyLayouts), + pivot: Default.pivot, + }; + const { timeZone, calendar } = Intl.DateTimeFormat().resolvedOptions(); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config = Object.assign({}, omit({ ...Default }, ...enums.PARSE.keys()), // use Default as base, omit parse-related + { + calendar, + timeZone, + locale: __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_locale).call(Tempo), + discovery: Symbol.keyFor($Tempo), + formats: Object.create(enums.FORMAT), + scope: 'global' + }); + __classPrivateFieldSet(Tempo, _classThis, 0, "f", _Tempo_usrCount); // reset user-key counter + for (const key of Object.keys(Token)) // purge user-allocated Tokens + if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys + delete Token[key]; + Tempo.addTerm(...registerTerms); // register built-in term plugins + const storeKey = Symbol.keyFor($Tempo); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), $Tempo)); + } + else { + const discovery = options.discovery ?? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.discovery ?? Symbol.keyFor($Tempo); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), discovery), options); + } + if (Context.type === CONTEXT.Browser || options.debug === true) + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(Tempo.config, 'Tempo:', __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config); + return Tempo.config; + } + /** release global config and reset library to defaults */ + static [(_Tempo_proto = function _Tempo_proto(obj) { return Object.getPrototypeOf(obj); }, _Tempo_hasOwn = function _Tempo_hasOwn(obj, key) { return Object.hasOwn(obj, key); }, _Tempo_isLocal = function _Tempo_isLocal(shape) { return shape.config.scope === 'local'; }, _Tempo_create = function _Tempo_create(obj, name) { return Object.create(__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, obj)[name]); }, _Tempo_setEvents = function _Tempo_setEvents(shape) { + const events = ownEntries(shape.parse.event, true); + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'event') && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'isMonthDay')) + return; // no local change needed + const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal + const groups = events + .map(([pat, _], idx) => `(?<${src}evt${idx}>${pat})`) // assign a number to the pattern + .join('|'); // make an 'Or' pattern for the event-keys + if (groups) { + const protoEvt = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.evt]?.source; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || groups !== protoEvt) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet')) + shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'snippet'); + Object.defineProperty(shape.parse.snippet, Token.evt, { + value: new RegExp(groups), + enumerable: true, + writable: true, + configurable: true + }); + } + } + if (shape.parse.isMonthDay) { + const protoDt = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.layout)[Token.dt]; + const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})'; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || localDt !== protoDt) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout')) + shape.parse.layout = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'layout'); + Object.defineProperty(shape.parse.layout, Token.dt, { + value: localDt, + enumerable: true, + writable: true, + configurable: true + }); + } + } + }, _Tempo_setPeriods = function _Tempo_setPeriods(shape) { + const periods = ownEntries(shape.parse.period, true); + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'period')) + return; // no local change needed + const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal + const groups = periods + .map(([pat, _], idx) => `(?<${src}per${idx}>${pat})`) // {pattern} is the 1st element of the tuple + .join('|'); // make an 'or' pattern for the period-keys + if (groups) { + const protoPer = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.per]?.source; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || groups !== protoPer) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet')) + shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'snippet'); + Object.defineProperty(shape.parse.snippet, Token.per, { + value: new RegExp(groups), + enumerable: true, + writable: true, + configurable: true + }); + } + } + }, _Tempo_isMonthDay = function _Tempo_isMonthDay(shape) { + const monthDay = [...asArray(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.mdyLocales)]; + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales')) + monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global) + return monthDay.some(mdy => { + const tzs = mdy.timeZones ?? mdy.getTimeZones?.() ?? []; + return tzs.includes(shape.config.timeZone); + }); + }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) { + const layouts = ownEntries(shape.parse.layout); // get entries of Layout Record + const swap = shape.parse.mdyLayouts; // get the swap-tuple + let chg = false; // no need to rebuild, if no change + swap + .forEach(([dmy, mdy]) => { + const idx1 = layouts.findIndex(([key]) => key.description === dmy); // 1st swap element exists in {layouts} + const idx2 = layouts.findIndex(([key]) => key.description === mdy); // 2nd swap element exists in {layouts} + if (idx1 === -1 || idx2 === -1) + return; // no pair to swap + const swap1 = (idx1 < idx2) && shape.parse.isMonthDay; // we prefer {mdy} and the 1st tuple was found earlier than the 2nd + const swap2 = (idx1 > idx2) && !shape.parse.isMonthDay; // we dont prefer {mdy} and the 1st tuple was found later than the 2nd + if (swap1 || swap2) { // since {layouts} is an array, ok to swap by-reference + [layouts[idx1], layouts[idx2]] = [layouts[idx2], layouts[idx1]]; + chg = true; + } + }); + if (chg) + shape.parse.layout = Object.fromEntries(layouts); // rebuild Layout in new parse order + }, _Tempo_setConfig = function _Tempo_setConfig(shape, ...options) { + const mergedOptions = Object.assign({}, ...options); + if (isEmpty(mergedOptions)) // nothing to do + return; + if (mergedOptions.store) // check for local-storage + Object.assign(mergedOptions, { ...Tempo.readStore(mergedOptions.store), ...mergedOptions }); + /** helper to normalize snippet/layout Options into the target Config */ + const collect = (target, value, convert) => { + const itm = asType(value); + target ??= {}; + switch (itm.type) { + case 'Object': + ownEntries(itm.value) + .forEach(([k, v]) => target[Tempo.getSymbol(k)] = convert(v)); + break; + case 'String': + case 'RegExp': + target[Tempo.getSymbol()] = convert(itm.value); + break; + case 'Array': + itm.value.forEach(elm => collect(target, elm, convert)); + break; + } + }; + ownEntries(mergedOptions) + .forEach(([optKey, optVal]) => { + if (isUndefined(optVal)) + return; // skip undefined values + const arg = asType(optVal); + switch (optKey) { + case 'snippet': + case 'layout': + case 'event': + case 'period': + // lazy-shadowing: only create local object if it doesn't already exist on local shape + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, optKey)) + shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, optKey); + const rule = shape.parse[optKey]; + if (['snippet', 'layout'].includes(optKey)) { + collect(rule, arg.value, v => optKey === 'snippet' + ? isRegExp(v) ? v : new RegExp(v) + : isRegExp(v) ? v.source : v); + } + else { + asArray(arg.value) + .forEach(elm => ownEntries(elm).forEach(([key, val]) => rule[key] = val)); + } + break; + case 'mdyLocales': + shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_mdyLocales).call(Tempo, arg.value); + break; + case 'mdyLayouts': // these are the 'layouts' that need to swap parse-order + shape.parse[optKey] = asArray(arg.value); + break; + case 'pivot': + shape.parse["pivot"] = Number(arg.value); + break; + case 'config': + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, shape, arg.value); + break; + case 'timeZone': + const zone = String(arg.value).toLowerCase(); + shape.config.timeZone = TimeZone[zone] ?? arg.value; + break; + case 'formats': + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.config, 'formats')) + shape.config.formats = shape.config.formats.extend({}); // shadow parent prototype + if (isObject(arg.value)) + shape.config.formats = shape.config.formats.extend(arg.value); + break; + case 'discovery': + shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal; + break; + case 'plugins': + asArray(optVal).forEach(p => this.extend(p)); + break; + case 'anchor': + break; // internal anchor used for relativity parsing + default: // else just add to config + Object.assign(shape.config, { [optKey]: optVal }); + break; + } + }); + const isMonthDay = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isMonthDay).call(Tempo, shape); + if (isMonthDay !== __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local' + shape.parse.isMonthDay = isMonthDay; + shape.config.sphere = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_setSphere).call(Tempo, shape, mergedOptions); + if (isDefined(shape.parse.mdyLayouts)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_swapLayout).call(Tempo, shape); + if (isDefined(shape.parse.event)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setEvents).call(Tempo, shape); + if (isDefined(shape.parse.period)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setPeriods).call(Tempo, shape); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setPatterns).call(Tempo, shape); // setup Regex DateTime patterns + }, _Tempo_mdyLocales = function _Tempo_mdyLocales(value) { + return asArray(value) + .map(mdy => new Intl.Locale(mdy)) + .map(mdy => ({ locale: mdy.baseName, timeZones: mdy.getTimeZones?.() ?? [] })); + }, _Tempo_setDiscovery = function _Tempo_setDiscovery(shape, key = shape.config.discovery ?? $Tempo) { + const sym = isString(key) ? Symbol.for(key) : key; + const discovery = globalThis[sym]; + if (!isObject(discovery)) + return {}; + // 1. Process TimeZones (normalize to lowercase for lookup) + const timeZones = discovery.timeZones ?? {}; + for (const [key, value] of Object.entries(timeZones)) + TimeZone[key.toLowerCase()] = value; + // 2. Process Terms + if (discovery.terms) + Tempo.addTerm(...asArray(discovery.terms)); + // 3. Process Formats + if (discovery.formats) + shape.config.formats = shape.config.formats.extend(discovery.formats); + // 4. Process Plugins + if (discovery.plugins) + asArray(discovery.plugins).forEach(p => this.extend(p)); + // 4. Process Options + let opts = discovery.options || {}; + return isFunction(opts) ? opts() : opts; + }, _Tempo_setPatterns = function _Tempo_setPatterns(shape) { + const snippet = shape.parse.snippet; + // if local and no snippet or layout overrides, we can just use the prototype's patterns + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet') && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout')) + return; + // ensure we have our own Map to mutate (shadow if local) + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'pattern')) + shape.parse.pattern = new Map(); + shape.parse.pattern.clear(); // reset {pattern} Map + for (const [sym, layout] of ownEntries(shape.parse.layout, true)) + shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet)); + }, Symbol.dispose)]() { Tempo.init(); } + /** + * Extends the Tempo class with new functionality. + * Plugins can add static or instance methods to the library. + */ + static extend(plugin, options) { + const p = plugin; + if (!p.installed) { + p(options, this, (val) => new this(val)); + p.installed = true; + } + return this; + } + /** Reads options from persistent storage (e.g., localStorage). */ + static readStore(key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { + return getStorage(key, {}); + } + /** Writes configuration into persistent storage. */ + static writeStore(config, key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { + return setStorage(key, config); + } + /** lookup or registers a new `Symbol` for a given key. */ + static getSymbol(key) { + var _b, _c; + if (isUndefined(key)) { + const usr = `usr.${__classPrivateFieldSet(_b = Tempo, _classThis, (_c = __classPrivateFieldGet(_b, _classThis, "f", _Tempo_usrCount), ++_c), "f", _Tempo_usrCount)}`; // allocate a prefixed 'user' key + return Token[usr] = Symbol(usr); // add to Symbol register + } + if (isSymbol(key)) + return key; + if (isString(key) && key.includes('.')) { + const description = key.split('.').pop(); // use last segment as description + return Token[key] ??= Symbol(description); + } + return Token[key] ?? Symbol.for(`$Tempo.${key}`); + } + /** translates {layout} into an anchored, case-insensitive RegExp. */ + static regexp(layout, snippet) { + // helper function to replace {name} placeholders with their corresponding snippets + function matcher(str, depth = 0) { + if (depth > 12) + return isRegExp(str) ? str.source : str; // depth guard + let source = isRegExp(str) ? str.source : str; + if (isRegExpLike(source)) // string that looks like a RegExp + source = source.substring(1, source.length - 1); // remove the leading/trailing "/" + if (source.startsWith('^') && source.endsWith('$')) + source = source.substring(1, source.length - 1); // remove the leading/trailing anchors (^ $) + return source.replace(Match.braces, (match, name) => { + const token = Tempo.getSymbol(name); // get the symbol for this {name} + const customs = snippet?.[token]?.source ?? snippet?.[name]?.source; + const globals = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.snippet[token]?.source ?? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.snippet[name]?.source; + const layout = Layout[token]; // get resolution source (layout) + let res = customs ?? globals ?? layout; // get the snippet/layout source + if (isNullish(res) && name.includes('.')) { // if no definition found, try fallback + const prefix = name.split('.')[0]; // get the base token name + const pToken = Tempo.getSymbol(prefix); + res = snippet?.[pToken]?.source ?? snippet?.[prefix]?.source + ?? Snippet[pToken]?.source ?? Snippet[prefix]?.source + ?? Layout[pToken]; + } + if (res && name.includes('.')) { // wrap dotted extensions for identification + const safeName = name.replace(/\./g, '_'); + if (!res.startsWith(`(?<${safeName}>`)) + res = `(?<${safeName}>${res})`; + } + return (isNullish(res) || res === match) // if no definition found, + ? match // return the original match + : matcher(res, depth + 1); // else recurse to see if snippet contains embedded "{}" pairs + }); + } + layout = matcher(layout); // initiate the layout-parse + return new RegExp(`^(${layout})$`, 'i'); // translate the source into a regex + } + /** Compares two `Tempo` instances or date-time values. */ + static compare(tempo1, tempo2) { + const one = new Tempo(tempo1), two = new Tempo(tempo2); + return Number((one.nano > two.nano) || -(one.nano < two.nano)) + 0; + } + /** global Tempo configuration */ + static get config() { + return getProxy(omit({ ...__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config }, 'value')); + } + /** global discovery configuration */ + static get discovery() { + const sym = Symbol.for(this.config.discovery); + return getProxy(omit({ ...globalThis[sym], scope: 'discovery' }, 'value')); + } + /** + * Returns a snapshot of the configuration layers used by Tempo. + * Useful for debugging how the final configuration is built. + */ + static get options() { + const keyFor = this.config.store ?? Symbol.keyFor($Tempo); + return { + default: this.default, + discovery: this.discovery, + storage: getProxy(Object.assign({ key: keyFor, scope: 'storage' }, omit(Tempo.readStore(keyFor), 'value'))), + global: this.config, + }; + } + static from(tempo, options) { return new this(tempo, options); } + static now() { return Temporal.Now.instant().epochNanoseconds; } + /** static Tempo.terms getter */ + static get terms() { + return secure(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) + .map(({ define, ...rest }) => rest)); // omit the 'define' method + } + /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ + static addTerm(...plugin) { + asArray(plugin) + .flat(1) + .forEach(p => { + if (!__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).some(t => t.key === p.key)) // check for duplicate key + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).push(p); // append; silently ignore duplicates + }); + } + /** static Tempo properties getter */ + static get properties() { + return secure(getAccessors(Tempo) + .filter(acc => getType(acc) !== 'Symbol')); // omit any Symbol properties + } + /** Tempo initial default settings */ + static get default() { + return secure({ ...Default, scope: 'default', timeZone: TimeZone }); + } + /** + * configuration governing the static 'rules' used when parsing Tempo.DateTime argument + */ + static get parse() { + const parse = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse; + return secure({ + ...parse, // spread primitives like {pivot} + snippet: { ...parse.snippet }, // spread nested objects + layout: { ...parse.layout }, + event: { ...parse.event }, + period: { ...parse.period }, + mdyLocales: [...parse.mdyLocales], + mdyLayouts: [...parse.mdyLayouts], + }); + } + /** iterate over Tempo properties */ + static [(_Tempo_conformToGroups = function _Tempo_conformToGroups(tempo) { + const groups = {}; + if ('year' in tempo) { + groups.yy = tempo.year.toString().padStart(4, '0'); + groups.mm = tempo.month.toString().padStart(2, '0'); + groups.dd = tempo.day.toString().padStart(2, '0'); + } + if ('hour' in tempo) { + groups.hh = tempo.hour.toString().padStart(2, '0'); + groups.mi = tempo.minute.toString().padStart(2, '0'); + groups.ss = tempo.second.toString().padStart(2, '0'); + groups.ff = tempo.nanosecond.toString().padStart(9, '0'); + } + return groups; + }, Symbol.iterator)]() { + return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters' + } + // #endregion Static public methods + // #region Instance symbols~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** allow for auto-convert of Tempo to BigInt, Number or String */ + [Symbol.toPrimitive](hint) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.config, getType(this), '.hint: ', hint); + switch (hint) { + case 'string': return this.toString(); // ISO 8601 string + case 'number': return this.epoch.ms; // Unix epoch (milliseconds) + default: return this.nano; // Unix epoch (nanoseconds) + } + } + /** iterate over instance formats */ + [Symbol.iterator]() { + return ownEntries(this.#fmt)[Symbol.iterator](); // instance Iterator over tuple of FormatType[] + } + get [Symbol.toStringTag]() { + return 'Tempo'; // hard-coded to avoid minification mangling + } + // #endregion Instance symbols + // #region Instance properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** constructor tempo */ #tempo; + /** constructor options */ #options = {}; + /** instantiation Temporal Instant */ #now; + /** underlying Temporal ZonedDateTime */ #zdt; + /** temporary anchor used during parsing */ #anchor; + /** prebuilt formats, for convenience */ #fmt = {}; + /** instance term plugins */ #term = Object.create(null); + /** instance values to complement static values */ #local = { + /** instance configuration */ config: {}, + /** instance parse rules (only populated if provided) */ parse: { result: [] } + }; + constructor(tempo, options = {}) { + this.#now = Temporal.Now.instant(); // stash current Instant + [this.#tempo, this.#options] = this.#swap(tempo, options); // swap arguments around, if arg1=Options or Temporal-like + this.#setLocal(this.#options); // parse the local options looking for overrides to Tempo.#global.config + // we now have all the info we need to instantiate a new Tempo + try { + this.#anchor = this.#options.anchor; + this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg + if (['iso8601', 'gregory'].includes(this.#local.config['calendar'])) { + for (const key of this.#local.config.formats.keys()) + Object.assign(this.#fmt, { [key]: this.format(key) }); + } + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) // add the plug-in getters for the pre-defined Terms to the instance + .forEach(({ key, scope, define }) => { + this.#setTerm(this, key, define, true); // add a getter which returns the key-field only + this.#setTerm(this, scope, define, false); // add a getter which returns a range-object + }); + if (isDefined(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending))) { // are we mutating with 'set()' ? + this.#local.parse.result.unshift(...__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending)); // prepend collected parse-matches + __classPrivateFieldSet(Tempo, _classThis, void 0, "f", _Tempo_pending); // and reset mutating-flag + } + secure(this.#fmt); // prevent mutations + secure(this.#term); // secure the initial object with getters + secure(this.#local.config); + secure(this.#local.parse); + } + catch (err) { + console.error('Tempo Constructor Error:', err); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.config, `Cannot create Tempo: ${err.message}\n${err.stack}`); + return {}; // return empty Object + } + } + // This function has be defined within the Tempo class (and not imported from another module) because it references a private-variable + /** this will add a getter on the instance #term private field */ + #setTerm(self, name, define, isKeyOnly) { + if (isDefined(name) && isDefined(define)) { + Object.defineProperty(self.#term, name, { + configurable: false, + enumerable: false, + get: function () { + const value = define.call(self, isKeyOnly); // evaluate the term range-lookup + self.#term = secure(Object.create(self.#term, { + [name]: { + value, + configurable: false, + writable: false, + enumerable: true + } + })); + return secure(value); + } + }); + } + } + // #endregion Constructor + // #region Instance public accessors~~~~~~~~~~~~~~~~~~~~~~ + /** 4-digit year (e.g., 2024) */ get yy() { return this.toDateTime().year; } + /** 4-digit ISO week-numbering year */ get wy() { return this.ww === 1 && this.mm === Tempo.MONTH.Dec ? this.yy + 1 : (this.ww >= 52 && this.mm === Tempo.MONTH.Jan ? this.yy - 1 : this.yy); } + /** Month number: Jan=1, Dec=12 */ get mm() { return this.toDateTime().month; } + /** ISO week number of the year */ get ww() { return this.toDateTime().weekOfYear; } + /** Day of the month (1-31) */ get dd() { return this.toDateTime().day; } + /** Day of the month (alias for `dd`) */ get day() { return this.toDateTime().day; } + /** Hour of the day (0-23) */ get hh() { return this.toDateTime().hour; } + /** Minutes of the hour (0-59) */ get mi() { return this.toDateTime().minute; } + /** Seconds of the minute (0-59) */ get ss() { return this.toDateTime().second; } + /** Milliseconds of the second (0-999) */ get ms() { return this.toDateTime().millisecond; } + /** Microseconds of the millisecond (0-999) */ get us() { return this.toDateTime().microsecond; } + /** Nanoseconds of the microsecond (0-999) */ get ns() { return this.toDateTime().nanosecond; } + /** Fractional seconds (e.g., 0.123456789) */ get ff() { return +(`0.${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`); } + /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz() { return this.toDateTime().timeZoneId; } + /** Unix timestamp (defaults to milliseconds) */ get ts() { return this.epoch[this.#local.config.timeStamp]; } + /** Short month name (e.g., 'Jan') */ get mmm() { return Tempo.MONTH.keyOf(this.#zdt.month); } + /** Full month name (e.g., 'January') */ get mon() { return Tempo.MONTHS.keyOf(this.#zdt.month); } + /** Short weekday name (e.g., 'Mon') */ get www() { return Tempo.WEEKDAY.keyOf(this.#zdt.dayOfWeek); } + /** Full weekday name (e.g., 'Monday') */ get wkd() { return Tempo.WEEKDAYS.keyOf(this.toDateTime().dayOfWeek); } + /** ISO weekday number: Mon=1, Sun=7 */ get dow() { return this.toDateTime().dayOfWeek; } + /** Nanoseconds since Unix epoch (BigInt) */ get nano() { return this.toDateTime().epochNanoseconds; } + /** current Tempo configuration */ + get config() { + return getProxy(omit({ ...this.#local.config }, 'scope', 'value', 'anchor')); + } + /** Instance-specific parse rules (merged with global) */ get parse() { return this.#local.parse; } + /** Object containing results from all term plugins */ get term() { return getProxy(this.#term); } + /** Formatted results for all pre-defined format codes */ get fmt() { return this.#fmt; } + /** units since epoch */ get epoch() { + return secure({ + /** seconds since epoch */ ss: Math.trunc(this.toDateTime().epochMilliseconds / 1_000), + /** milliseconds since epoch */ ms: this.toDateTime().epochMilliseconds, + /** microseconds since epoch */ us: Number(this.toDateTime().epochNanoseconds / BigInt(1_000)), + /** nanoseconds since epoch */ ns: this.toDateTime().epochNanoseconds, + }); + } + // #endregion Instance public accessors + // #region Instance private accessors + /** + * @Immutable class decorators wrap the class but leave internal lexical bindings pointing to the original, undecorated class. + * To ensure new instances returned by instance methods are properly frozen, + * we must instantiate internally from the decorated wrapper (which is bound to `this.constructor`) + * rather than using `new Tempo(..)`. + */ + get #Tempo() { return this.constructor; } + /** time duration until another date-time */ until(optsOrDate, optsOrUntil) { return this.#until(optsOrDate, optsOrUntil); } + /** time elapsed since another date-time */ since(optsOrDate, optsOrUntil) { return this.#since(optsOrDate, optsOrUntil); } + /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt) { return this.#format(fmt); } + /** returns a new `Tempo` with specific duration added. */ add(tempo, options) { return this.#add(tempo, options); } + /** returns a new `Tempo` with specific offsets. */ set(tempo, options) { return this.#set(tempo, options); } + /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config); } + /** returns the underlying Temporal.ZonedDateTime */ toDateTime() { return this.#zdt ?? this.#anchor ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone); } + /** returns a Temporal.PlainDate representation */ toPlainDate() { return this.toDateTime().toPlainDate(); } + /** returns a Temporal.PlainTime representation */ toPlainTime() { return this.toDateTime().toPlainTime(); } + /** returns a Temporal.PlainDateTime representation */ toPlainDateTime() { return this.toDateTime().toPlainDateTime(); } + /** returns the underlying Temporal.Instant */ toInstant() { return this.toDateTime().toInstant(); } + /** the date-time as a standard `Date` object. */ toDate() { return new Date(this.toDateTime().round({ smallestUnit: enums.ELEMENT.ms }).epochMilliseconds); } + /** the ISO8601 string representation of the date-time. */ toString() { return this.toPlainDateTime().toString({ calendarName: 'never' }); } + /** Custom JSON serialization for `JSON.stringify`. */ toJSON() { return omit({ ...this.#local.config, value: this.toString() }, 'scope', 'store'); } + /** `true` if the underlying date-time is valid. */ isValid() { return !isEmpty(this); } + // #endregion Instance public methods + // #region Instance private methods~~~~~~~~~~~~~~~~~~~~~~~ + /** setup local 'config' and 'parse' rules (prototype-linked to global) */ + #setLocal(options) { + // setup local config (prototype-linked to global config) + this.#local.config = Object.create(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config); + Object.assign(this.#local.config, { scope: 'local' }); + // setup local parse rules (prototype-linked to global parse) + this.#local.parse = Object.create(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse); + this.#local.parse.result = []; + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, this.#local, options); // set #local config + } + /** parse DateTime input */ + #parse(tempo, dateTime) { + const today = (dateTime ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone)) + .withTimeZone(this.#local.config.timeZone); + const { type, value } = this.#conform(tempo, today, isDefined(dateTime)); + // evaluate latest timezone / calendar (after #conform which might have updated them) + const { timeZone, calendar } = this.#local.config; + const tz = isString(timeZone) ? timeZone : timeZone.id ?? timeZone.timeZoneId; + const cal = isString(calendar) ? calendar : calendar.id ?? calendar.calendarId; + if (isEmpty(this.#local.parse.result) && isUndefined(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending))) // #conform() didn't find any matches + this.#local.parse.result = [{ type, value }]; + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'parse', `{type: ${type}, value: ${value}}`); // show what we're parsing + switch (type) { + case 'Null': + case 'Void': + case 'Empty': + case 'Undefined': + return today; + case 'String': // String which didn't conform to a Tempo.pattern + try { + const str = value.replace(/Z$/, ''); // requested Z-stripping for adoption + const zdt = Temporal.ZonedDateTime.from(str.includes('[') ? str : `${str}[${tz}]`); + if (this.#local) + this.#local.config.timeZone = zdt.timeZoneId; + return zdt; + } + catch (err) { // else see if Date.parse can parse value + this.#result({ type: 'String', value }, { match: 'Date.parse' }); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, 'Cannot detect DateTime; fallback to Date.parse'); + if (Match.date.test(value)) { + try { + return Temporal.PlainDate.from(value).toZonedDateTime(tz).withCalendar(cal); + } + catch { /* ignore and fallback */ } + } + try { + return Temporal.PlainDateTime.from(value).toZonedDateTime(tz).withCalendar(cal); + } + catch { /* ignore and fallback to Date.parse */ } + const date = new Date(value.toString()); + if (isNaN(date.getTime())) + return __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Cannot parse Date: "${value}"`); + return Temporal.ZonedDateTime // adopt instance timezone + .from(`${date.toISOString().substring(0, 23)}[${tz}]`) + .withCalendar(cal); + } + case 'Temporal.ZonedDateTime': // ZonedDateTime object: convert to instance timezone + return (value.timeZoneId === tz && value.calendarId === cal) + ? value + : value.withTimeZone(tz).withCalendar(cal); + case 'Temporal.PlainDate': + case 'Temporal.PlainDateTime': + return value + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.PlainTime': + return today.withPlainTime(value); + case 'Temporal.PlainYearMonth': // assume current day, else end-of-month + return value + .toPlainDate({ day: Math.min(today.day, value.daysInMonth) }) + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.PlainMonthDay': // assume current year + return value + .toPlainDate({ year: today.year }) + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.Instant': + return value + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'Tempo': + return value + .toDateTime() + .withTimeZone(tz) + .withCalendar(cal); // apply instance timezone to cloned Tempo + case 'Date': + return Temporal.Instant.fromEpochMilliseconds(value.getTime()) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'Number': // Number which didn't conform to a Tempo.pattern + const [seconds = BigInt(0), suffix = BigInt(0)] = value.toString().split('.').map(BigInt); + const nano = BigInt(suffix.toString().substring(0, 9).padEnd(9, '0')); + return Temporal.Instant.fromEpochNanoseconds(seconds * BigInt(1_000_000_000) + nano) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'BigInt': // BigInt is not conformed against a Tempo.pattern + return Temporal.Instant.fromEpochNanoseconds(value) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected Tempo parameter type: ${type}, ${String(value)}`); + return today; + } + } + /** resolve constructor / method arguments */ + #swap(tempo, options = {}) { + return this.#isOptions(tempo) + ? [tempo.value, { ...tempo }] + : [tempo, { ...options }]; + } + /** check if we've been given a Tempo Options object */ + #isOptions(arg) { + if (!isObject(arg) || arg.constructor !== Object) + return false; + const keys = ownKeys(arg); // if it contains any 'mutation' keys, then it's not (just) an options object + if (keys.some(key => enums.MUTATION.has(key))) + return false; + return keys + .some(key => enums.OPTION.has(key)); + } + /** check if we've been given a ZonedDateTimeLike object */ + #isZonedDateTimeLike(tempo) { + if (!isObject(tempo) || isEmpty(tempo)) + return false; + // if it contains any 'options' keys, it's not a ZonedDateTime + const keys = ownKeys(tempo); + if (keys.some(key => enums.OPTION.has(key) && key !== 'value')) + return false; + // we include {value} to allow for Tempo instances + return keys + .filter(isString) + .every(key => enums.ZONED_DATE_TIME.has(key)); + } + #result(...rest) { + const match = Object.assign({}, ...rest); // collect all object arguments + if (!isEmpty(match.groups)) { + if (isDefined(this.#anchor) && !match.isAnchored) + match.isAnchored = true; + (__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending) ?? this.#local.parse.result).push(match); + } + } + /** evaluate 'string | number' input against known patterns */ + #conform(tempo, dateTime, isAnchored = false) { + const arg = asType(tempo); + const { type, value } = arg; + if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property) + const { timeZone, calendar, value, ...options } = tempo; + let zdt = !isEmpty(options) + ? dateTime.with({ ...options }) + : dateTime; + if (timeZone) + zdt = zdt.withTimeZone(timeZone); // optionally set timeZone + if (calendar) + zdt = zdt.withCalendar(calendar); // optionally set calendar + this.#result({ type: 'Temporal.ZonedDateTimeLike', value: zdt, match: 'Temporal.ZonedDateTimeLike' }); + return Object.assign(arg, { + type: 'Temporal.ZonedDateTime', // override {arg.type} + value: zdt, + }); + } + if (type !== 'String' && type !== 'Number') { + this.#result(arg, { match: type }); + return arg; + } + if (isFunction(value)) { + const res = value.call(this); + return this.#conform(res, dateTime, isAnchored); + } + const trim = trimAll(value); + if (type === 'String') { // if original value is String + if (isEmpty(trim)) { // don't conform empty string + this.#result(arg, { match: 'Empty' }); + return Object.assign(arg, { type: 'Empty' }); + } + if (isIntegerLike(trim)) { // if string representation of BigInt literal + this.#result(arg, { match: 'BigInt' }); + return Object.assign(arg, { type: 'BigInt', value: asInteger(trim) }); + } + } + else { // else it is a Number + if (trim.length <= 7) { // cannot reliably interpret small numbers: might be {ss} or {yymmdd} or {dmmyyyy} + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, 'Cannot safely interpret number with less than 8-digits: use string instead'); + return arg; + } + } + // const isSimpleIsoOrNumeric = typeof value === 'string' && (Match.date.test(value) || /^\d+$/.test(value)); + const map = this.#local.parse.pattern; + for (const [sym, pat] of map) { + const groups = this.#parseMatch(pat, trim); // determine pattern-match groups + if (isEmpty(groups)) + continue; // no match, so skip this iteration + this.#result(arg, { match: sym.description, groups: cleanify(groups) }); // stash the {key} of the pattern that was matched + dateTime = this.#parseZone(groups, dateTime); // resolve timezone early so events can use it + dateTime = this.#parseGroups(groups, dateTime); // mutate the {groups} object (resolves events/periods) + dateTime = this.#parseWeekday(groups, dateTime); // if {weekDay} pattern, calculate a calendar value + dateTime = this.#parseDate(groups, dateTime); // if {calendar}|{event} pattern, translate to date value + dateTime = this.#parseTime(groups, dateTime); // if {clock}|{period} pattern, translate to a time value + /** + * finished analyzing a matched pattern. + * rebuild {arg.value} into a ZonedDateTime + */ + // if no time-components were matched, strip time to midnight baseline + if (!isAnchored && !['hh', 'mi', 'ss', 'ff', 'mer', 'per'].some(key => isDefined(groups[key]))) + dateTime = dateTime.withPlainTime('00:00:00'); + Object.assign(arg, { type: 'Temporal.ZonedDateTime', value: dateTime }); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'groups', groups); // show the resolved date-time elements + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'pattern', sym.description); // show the pattern that was matched + break; // stop checking patterns + } + return arg; + } + /** apply a regex-match against a value, and clean the result */ + #parseMatch(pat, value) { + const groups = value.toString().match(pat)?.groups || {}; + ownEntries(groups) // remove undefined, NaN, null and empty values + .forEach(([key, val]) => isEmpty(val) && delete groups[key]); + return groups; + } + /** resolve {event} | {period} to their date | time values (mutates groups) */ + #parseGroups(groups, dateTime) { + this.#anchor = dateTime; // temporarily anchor the instance so events resolve relative to current state + try { + for (const key of ownKeys(groups)) { + const isEvent = Match.event.test(key); + const isPeriod = Match.period.test(key); + if (!isEvent && !isPeriod) + continue; + const idx = +key.substring(4); + const src = key.startsWith('g') ? (isEvent ? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.event : __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.period) : (isEvent ? this.#local.parse.event : this.#local.parse.period); + const entry = ownEntries(src, true)[idx]; + if (!entry) + continue; + const definition = entry[1]; + const res = isFunction(definition) ? definition.call(this).toString() : definition; + const resGroups = isEvent ? this.#parseEvent(res) : this.#parsePeriod(res); + Object.assign(groups, resGroups); + delete groups[key]; + } + } + finally { + this.#anchor = void 0; // reset anchor + } + // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date) + if (isDefined(groups["mm"]) && !isNumeric(groups["mm"])) { + const mm = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_prefix).call(Tempo, groups["mm"]); // conform month-name + groups["mm"] = Tempo.MONTH.keys().findIndex((el) => el === mm).toString().padStart(2, '0'); + } + // Apply mutated groups to dateTime + if (isDefined(groups.yy) || isDefined(groups.mm) || isDefined(groups.dd)) + dateTime = this.#parseDate(groups, dateTime); + if (isDefined(groups.hh) || isDefined(groups.mi) || isDefined(groups.ss) || isDefined(groups.ff) || isDefined(groups.mer)) + dateTime = this.#parseTime(groups, dateTime); + return dateTime; + } + /** + * We expect similar offset-logic to apply to 'modifiers' when parsing a string DateTime. + * returns {adjust} to make, based on {modifier}, {offset}, and {period} + * - previous period + * + next period + * -3 three periods ago + * < prior to base-date (asIs) + * <= prior to base-date (plus one) + */ + #parseModifier({ mod, adjust, offset, period }) { + adjust = Math.abs(adjust); + switch (mod) { + case void 0: // no adjustment + case '=': + case 'this': // current period + return 0; + case '+': // next period + case 'next': + return adjust; + case '-': // previous period + case 'prev': + case 'last': + return -adjust; + case '<': // period before base-date + case 'ago': + return (period <= offset) + ? -adjust + : -(adjust - 1); + case '<=': // period before or including base-date + return (period < offset) + ? -adjust + : -(adjust - 1); + case '>': // period after base-date + case 'hence': + return (period > offset) + ? adjust + : (adjust - 1); + case '>=': // period after or including base-date + case '+=': + return (period >= offset) + ? adjust + : (adjust - 1); + default: // unexpected modifier + return 0; + } + } + /** + * if named-group 'wkd' detected (with optional 'mod', 'nbr', 'sfx' or time-units), then calc relative weekday offset + * | Example | Result | Note | + * | :--- | :---- | :---- | + * | `Wed` | Wed this week | might be earlier or later or equal to current day | + * | `-Wed` | Wed last week | same as new Tempo('Wed').add({ weeks: -1 }) | + * | `+Wed` | Wed next week | same as new Tempo('Wed').add({ weeks: 1 }) | + * | `-3Wed` | Wed three weeks ago | same as new Tempo('Wed').add({ weeks: -3 }) | + * | `', hh: '10', mer: 'pm'} + * we early-exit if we find anything other than time-units + */ + const time = ['hh', 'mi', 'ss', 'ms', 'us', 'ns', 'ff', 'mer']; + if (!ownKeys(rest) + .every(key => time.includes(key))) // non 'time-unit' keys detected + return dateTime; // this is not a true {weekDay} pattern, so early-exit + if (!isEmpty(mod) && !isEmpty(sfx)) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${sfx}'`); + return dateTime; // cannot provide both 'modifier' and 'suffix' + } + const weekday = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_prefix).call(Tempo, wkd); // conform weekday-name + const adjust = +nbr; // how many weeks to adjust + const offset = Tempo.WEEKDAY.keys() // how far weekday is from today + .findIndex((el) => el === weekday); + const days = offset - dateTime.dayOfWeek // number of days to offset from dateTime + + (this.#parseModifier({ mod: mod ?? sfx, adjust, offset, period: dateTime.dayOfWeek }) * dateTime.daysInWeek); + delete groups["wkd"]; + delete groups["mod"]; + delete groups["nbr"]; + delete groups["sfx"]; + return dateTime + .add({ days }); // set new {day} + } + /** + * match input against date patterns + * @returns adjusted ZonedDateTime with resolved time-components + */ + #parseDate(groups, dateTime) { + const { mod, nbr = '1', afx, unt, yy, mm, dd } = groups; + if (isEmpty(yy) && isEmpty(mm) && isEmpty(dd) && isUndefined(unt)) + return dateTime; // return default + if (!isEmpty(mod) && !isEmpty(afx)) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${afx}'`); + return dateTime; + } + let { year, month, day } = this.#num({ + year: yy ?? dateTime.year, // supplied year, else current year + month: mm ?? dateTime.month, // supplied month, else current month + day: dd ?? dateTime.day, // supplied day, else current day + }); + // handle {unt} relative offset (e.g. '2 days ago') + if (unt) { + const adjust = +nbr; + const direction = (mod === '<' || mod === '-' || afx === 'ago') ? -1 : 1; + const plural = singular(unt) + 's'; + dateTime = dateTime.add({ [plural]: adjust * direction }); + delete groups["unt"]; + delete groups["nbr"]; + delete groups["afx"]; + delete groups["mod"]; + return dateTime; + } + // convert 2-digit year to 4-digits using 'pivot-year' (relative to current century) + if (year.toString().match(Match.twoDigit)) { // if {year} match just-two digits + const pivot = dateTime + .subtract({ years: this.#local.parse["pivot"] }) // pivot cutoff to determine century + .year % 100; // remainder + const century = Math.trunc(dateTime.year / 100); // current century + year += (century - Number(year >= pivot)) * 100; // now a four-digit year + } + // adjust the {year} if a Modifier is present + const adjust = +nbr; // how many years to adjust + const offset = Number(pad(month) + '.' + pad(day)); // the event month.day + const period = Number(pad(dateTime.month) + '.' + pad(dateTime.day + 1)); + year += this.#parseModifier({ mod: mod ?? afx, adjust, offset, period }); + Object.assign(groups, { yy: year, mm: month, dd: day }); + delete groups["mod"]; + delete groups["nbr"]; + delete groups["afx"]; + // all date-components are now set; check for overflow in case past end-of-month + return Temporal.PlainDate.from({ year, month, day }, { overflow: 'constrain' }) + .toZonedDateTime(dateTime.timeZoneId) // adjust to constrained date + .withPlainTime(dateTime.toPlainTime()); // restore the time + } + /** match input against 'tm' pattern (returns adjusted ZonedDateTime) */ + #parseTime(groups = {}, dateTime) { + if (isUndefined(groups["hh"])) // must contain 'time' with at least {hh} + return dateTime; + let { hh = 0, mi = 0, ss = 0, ms = 0, us = 0, ns = 0 } = this.#num(groups); + if (hh >= 24) { + dateTime = dateTime.add({ days: Math.trunc(hh / 24) }); // move the date forward number of days to offset + hh %= 24; // midnight is '00:00' on the next-day + } + if (isDefined(groups["ff"])) { // {ff} is fractional seconds and overrides {ms|us|ns} + const ff = groups["ff"].substring(0, 9).padEnd(9, '0'); + ms = +ff.substring(0, 3); + us = +ff.substring(3, 6); + ns = +ff.substring(6, 9); + } + if (groups["mer"]?.toLowerCase() === 'pm' && hh < 12 && (hh + mi + ss + ms + us + ns) > 0) + hh += 12; // anything after midnight and before midday + if (groups["mer"]?.toLowerCase() === 'am' && hh >= 12) + hh -= 12; // anything after midday + return dateTime // return the computed time-values + .withPlainTime({ hour: hh, minute: mi, second: ss, millisecond: ms, microsecond: us, nanosecond: ns }); + } + /** + * apply a timezone or calendar bracket to the current ZonedDateTime + * normalization is applied to ensure 'Z' is treated as 'UTC' + */ + #parseZone(groups, dateTime) { + const tzd = groups["tzd"]?.replace(Match.zed, 'UTC'); // normalize timezone/offset + const brk = groups["brk"]?.replace(Match.zed, 'UTC'); // handle bracketed timezone + const zone = brk || tzd; + if (zone && zone !== dateTime.timeZoneId && !zone.startsWith('u-ca=')) { + if (this.#local) + this.#local.config.timeZone = zone; // update local config if exists + dateTime = dateTime.toPlainDateTime().toZonedDateTime(zone); // adopt timezone override (stable) + } + const cal = groups["cal"]; + if (cal && cal !== dateTime.calendarId) { + const calendar = cal.startsWith('u-ca=') ? cal.substring(5) : cal; + this.#local.config.calendar = calendar; + dateTime = dateTime.withCalendar(calendar); + } + delete groups["brk"]; + delete groups["cal"]; + delete groups["tzd"]; + return dateTime; + } + /** match an {event} string against a date pattern */ + #parseEvent(evt) { + const groups = {}; + const pats = this.#local.parse.isMonthDay // first find out if we have a US-format timeZone + ? ['mdy', 'dmy', 'ymd'] // if so, try {mdy} before {dmy} + : ['dmy', 'mdy', 'ymd']; // else try {dmy} before {mdy} + for (const pat of pats) { + const reg = this.#getPattern(pat); + if (isDefined(reg)) { + const match = this.#parseMatch(reg, evt); + if (!isEmpty(match)) { + this.#result({ type: 'Event', value: evt, match: pat, groups: cleanify(match) }); + Object.assign(groups, match); + } + } + if (!isEmpty(groups)) + break; // return on the first matched pattern + } + return groups; // overlay the match date-components + } + /** match a {period} string against the time pattern */ + #parsePeriod(per) { + const groups = {}; + const tm = this.#getPattern('tm'); // get the RegExp for the time-pattern + if (isDefined(tm)) { + const match = this.#parseMatch(tm, per); + if (!isEmpty(match)) { + this.#result({ type: 'Period', value: per, match: 'tm', groups: cleanify(match) }); + Object.assign(groups, match); + } + } + return groups; + } + /** lookup the RegExp for a given pattern name */ + #getPattern(pat) { + const reg = this.#local.parse.pattern.get(Tempo.getSymbol(pat)); + if (isUndefined(reg)) + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Cannot find pattern: "${pat}"`); + return reg; + } + /** return a new object, with only numeric values */ + #num = (groups) => { + return ownEntries(groups) + .reduce((acc, [key, val]) => { + if (isNumeric(val)) + acc[key] = asNumber(val); + return acc; + }, {}); + }; + /** mutate the date-time by adding a duration */ + #add = (args, options = {}) => { + var _b; + const tz = options.timeZone ?? this.tz; + let zdt = this.#zdt.withTimeZone(tz); + const overrides = { + timeZone: tz, + calendar: this.#zdt.calendarId + }; + __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, "f", _Tempo_pending) ?? [...this.#local.parse.result], "f", _Tempo_pending); // collected parse-results so-far + if (isDefined(args)) { + if (isObject(args) && args.constructor === Object) { + const mutate = 'add'; + zdt = Object.entries(args ?? {}) // loop through each mutation + .reduce((zdt, [unit, offset]) => { + if (unit === 'timeZone' || unit === 'calendar') + return zdt; + const single = singular(unit); + const plural = single + 's'; + switch (`${mutate}.${single}`) { + case 'add.year': + case 'add.month': + case 'add.week': + case 'add.day': + case 'add.hour': + case 'add.minute': + case 'add.second': + case 'add.millisecond': + case 'add.microsecond': + case 'add.nanosecond': + return zdt + .add({ [plural]: offset }); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`); + return zdt; + } + }, zdt); + } + else { + return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt }); + } + } + return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt }); + }; + /** mutate the date-time by setting specific offsets */ + #set = (args, options = {}) => { + var _b; + const tz = options.timeZone ?? this.tz; + let zdt = this.#zdt.withTimeZone(tz); + const overrides = { + timeZone: tz, + calendar: this.#zdt.calendarId + }; + __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, "f", _Tempo_pending) ?? [...this.#local.parse.result], "f", _Tempo_pending); // collected parse-results so-far + if (isDefined(args)) { + if (isObject(args) && args.constructor === Object) { + if (args.timeZone) + overrides.timeZone = args.timeZone; + if (args.calendar) + overrides.calendar = args.calendar; + zdt = Object.entries(args ?? {}) // loop through each mutation + .reduce((zdt, [key, adjust]) => { + if (key === 'timeZone' || key === 'calendar') + return zdt; + const { mutate, offset, single } = ((key) => { + switch (key) { + case 'start': + case 'mid': + case 'end': + return { mutate: key, offset: 0, single: singular(adjust?.toString() ?? '') }; + default: + return { mutate: 'set', offset: adjust, single: singular(key) }; + } + })(key); // IIFE to analyze arguments + switch (`${mutate}.${single}`) { + case 'set.timeZone': + return zdt.withTimeZone(offset); + case 'set.calendar': + return zdt.withCalendar(offset); + case 'set.period': + case 'set.time': + case 'set.date': + case 'set.event': + case 'set.dow': // set day-of-week by number + case 'set.wkd': // set day-of-week by name + return this.#parse(offset, zdt); + case 'set.year': + case 'set.month': + // case 'set.week': // not defined + case 'set.day': + case 'set.hour': + case 'set.minute': + case 'set.second': + case 'set.millisecond': + case 'set.microsecond': + case 'set.nanosecond': + return zdt + .with({ [single]: offset }); + case 'set.yy': + case 'set.mm': + // case 'set.ww': // not defined + case 'set.dd': + case 'set.hh': + case 'set.mi': + case 'set.ss': + case 'set.ms': + case 'set.us': + case 'set.ns': + const value = Tempo.ELEMENT[single]; + return zdt + .with({ [value]: offset }); + case 'start.year': + return zdt + .with({ month: Tempo.MONTH.Jan, day: 1 }) + .startOfDay(); + case 'start.term': // TODO + return zdt; + case 'start.month': + return zdt + .with({ day: 1 }) + .startOfDay(); + case 'start.week': + return zdt + .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) }) + .startOfDay(); + case 'start.day': + return zdt + .startOfDay(); + case 'start.hour': + case 'start.minute': + case 'start.second': + return zdt + .round({ smallestUnit: offset, roundingMode: 'trunc' }); + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + case 'mid.year': + return zdt + .with({ month: Tempo.MONTH.Jul, day: 1 }) + .startOfDay(); + case 'mid.term': // TODO: relevant? + return zdt; + case 'mid.month': + return zdt + .with({ day: Math.trunc(zdt.daysInMonth / 2) }) + .startOfDay(); + case 'mid.week': + return zdt + .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) }) + .startOfDay(); + case 'mid.day': + return zdt + .round({ smallestUnit: 'day', roundingMode: 'trunc' }) + .add({ hours: 12 }); + case 'mid.hour': + return zdt + .round({ smallestUnit: 'hour', roundingMode: 'trunc' }) + .add({ minutes: 30 }); + case 'mid.minute': + return zdt + .round({ smallestUnit: 'minute', roundingMode: 'trunc' }) + .add({ seconds: 30 }); + case 'mid.second': + return zdt + .round({ smallestUnit: 'second', roundingMode: 'trunc' }) + .add({ milliseconds: 500 }); + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + case 'end.year': + return zdt + .add({ years: 1 }) + .with({ month: Tempo.MONTH.Jan, day: 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.term': // TODO + return zdt + .subtract({ nanoseconds: 1 }); + case 'end.month': + return zdt + .add({ months: 1 }) + .with({ day: 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.week': + return zdt + .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.day': + case 'end.hour': + case 'end.minute': + case 'end.second': + return zdt + .round({ smallestUnit: offset, roundingMode: 'ceil' }) + .subtract({ nanoseconds: 1 }); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`); + return zdt; + } + }, zdt); // start reduce with the shifted zonedDateTime + } + else { + return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt }); + } + } + return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt }); + }; + #format = (fmt) => { + if (isNull(this.#tempo)) + return void 0; // don't format dates + const obj = this.#local.config.formats; + let template = (isString(fmt) && obj.has(fmt)) + ? obj[fmt] + : String(fmt); + // auto-meridiem: if {HH} is present and {mer} is absent, append it after the last time component + if (template.includes('{HH}') && !template.includes('{mer}') && !template.includes('{MER}')) { + const index = Math.max(template.lastIndexOf('{HH}'), template.lastIndexOf('{mi}'), template.lastIndexOf('{ss}')); + if (index !== -1) { + const end = template.indexOf('}', index) + 1; + template = template.slice(0, end) + '{mer}' + template.slice(end); + } + } + const result = template.replace(Match.braces, (_match, token) => { + switch (token) { + case 'wy': return pad(this.wy, 4); + case 'yyww': return pad(this.wy, 4) + pad(this.ww); + case 'yyyy': return pad(this.yy, 4); + case 'yy': return pad(this.yy % 100); + case 'mon': return this.mon; + case 'mmm': return this.mmm; + case 'mm': return pad(this.mm); + case 'dd': return pad(this.dd); + case 'day': return this.day.toString(); + case 'dow': return this.dow.toString(); + case 'wkd': return this.wkd; + case 'www': return this.www; + case 'ww': return pad(this.ww); + case 'hh': return pad(this.hh); + case 'HH': return pad(this.hh > 12 ? this.hh % 12 : this.hh || 12); + case 'mer': return this.hh >= 12 ? 'pm' : 'am'; + case 'MER': return this.hh >= 12 ? 'PM' : 'AM'; + case 'mi': return pad(this.mi); + case 'ss': return pad(this.ss); + case 'ms': return pad(this.ms, 3); + case 'us': return pad(this.us, 3); + case 'ns': return pad(this.ns, 3); + case 'ff': return `${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`; + case 'hhmiss': return `${pad(this.hh)}${pad(this.mi)}${pad(this.ss)}`; + case 'ts': return this.ts.toString(); + case 'nano': return this.nano.toString(); + case 'tz': return this.tz; + default: { + return token.startsWith('term.') + ? stringify(this.term[token.slice(5)]) + : `{${token}}`; // unknown format-code, return as-is + } + } + }); + const isExplicitlyNumeric = ['{yyyy}{ww}', '{yyyy}{mm}', '{yyyy}{mm}{dd}', '{yyww}', '{wy}{ww}', '{wy}'].includes(template); + return (isExplicitlyNumeric ? ifNumeric(result) : result); + }; + #until(arg, until = {}, since = false) { + let value, opts = {}, unit; + switch (true) { + case isString(arg) && Tempo.ELEMENT.includes(singular(arg)): + unit = arg; // e.g. tempo.until('hours') + ({ value, ...opts } = until); + break; + case isString(arg): // assume 'arg' is a dateTime string + value = arg; // e.g. tempo.until('20-May-1957', {unit: 'years'}) + if (isObject(until)) + ({ unit, ...opts } = until); + else + unit = until; // assume the 'until' arg is a 'unit' string + break; + case isObject(arg) && isString(until): // assume 'until' is a Unit + unit = until; // e.g. tempo.until({value:'20-May-1957}, 'years'}) + ({ value, ...opts } = arg); + break; + case isObject(arg) && isObject(until): // assume combination of Tempo.Options and Tempo.Until + ({ value, unit, ...opts } = Object.assign({}, arg, until)); + break; + case isString(until): + unit = until; + value = arg; + break; + case isObject(until): + unit = until.unit; + value = arg; + break; + default: + value = arg; // assume 'arg' is a DateTime + } + const offset = new this.#Tempo(value, opts); // create the offset Tempo + const diffZone = this.#zdt.timeZoneId !== offset.#zdt.timeZoneId; + // Temporal restricts cross-timezone math to absolute units ('hours') to avoid DST ambiguity + const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') }); + if (isDefined(unit)) + unit = `${singular(unit)}s`; // coerce to plural + return (isUndefined(unit) || since) // if no 'unit' provided, or if called via #since() + ? getAccessors(duration) // return an Object with all the duration accessors + .reduce((acc, dur) => Object.assign(acc, { [dur]: duration[dur] }), ifDefined({ iso: duration.toString(), unit })) + : duration.total({ relativeTo: this.#zdt, unit }); // sum-up the duration components + } + /** format the elapsed time between two Tempos (to nanosecond) */ + #since(arg, until = {}) { + const dur = this.#until(arg, until, true); // get a Tempo.Duration object + const date = [dur.years, dur.months, dur.days]; + const time = [dur.hours, dur.minutes, dur.seconds]; + const fraction = [dur.milliseconds, dur.microseconds, dur.nanoseconds] + .map(Math.abs) + .map(nbr => nbr.toString().padStart(3, '0')) + .join(''); + const rtf = new Intl.RelativeTimeFormat(this.#local.config['locale'], { style: 'narrow' }); + switch (dur.unit) { + case 'years': + return rtf.format(date[0], 'years'); + case 'months': + return rtf.format(date[1], 'months'); + case 'weeks': + return rtf.format(date[1], 'weeks'); + case 'days': + return rtf.format(date[2], 'days'); + case 'hours': + return rtf.format(time[0], 'hours'); + case 'minutes': + return rtf.format(time[1], 'minutes'); + case 'seconds': + return rtf.format(time[2], 'seconds'); + case 'milliseconds': + case 'microseconds': + case 'nanoseconds': + return `${fraction}`; + default: + return dur.iso; + } + } + static { + __runInitializers(_classThis, _classExtraInitializers); + } + }; + return Tempo = _classThis; +})(); +export { Tempo }; +// #endregion Namespace +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Tempo.init(); // initialize default global configuration +// shortcut functions to common Tempo properties / methods +/** check valid Tempo */ export const isTempo = (tempo) => isType(tempo, 'Tempo'); +/** current timestamp (ts) */ export const getStamp = ((tempo, options) => new Tempo(tempo, options).ts); +/** create new Tempo */ export const getTempo = ((tempo, options) => new Tempo(tempo, options)); +/** format a Tempo */ export const fmtTempo = ((fmt, tempo, options) => new Tempo(tempo, options).format(fmt)); +//# sourceMappingURL=tempo.class.js.map \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js.map b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js.map new file mode 100644 index 00000000..02549ac1 --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tempo.class.js","sourceRoot":"","sources":["tempo.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.d.ts new file mode 100644 index 00000000..9e776a7f --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.d.ts @@ -0,0 +1,17 @@ +import type { Tempo } from '#core/tempo.class.js'; +declare module '#core/tempo.class.js' { + namespace Tempo { + let ticker: { + (intervalMs: number | string | bigint): AsyncGenerator & AsyncDisposable; + (intervalMs: number | string | bigint, seed: Tempo.DateTime): AsyncGenerator & AsyncDisposable; + (intervalMs: number | string | bigint, callback: (t: Tempo, stop: () => void) => void): (() => void) & Disposable; + (intervalMs: number | string | bigint, seed: Tempo.DateTime, callback: (t: Tempo, stop: () => void) => void): (() => void) & Disposable; + }; + } +} +/** + * # TickerPlugin + * Implementation of Tempo.ticker as an optional plugin. + * Extends the Tempo class with pulse-based date-time generators. + */ +export declare const TickerPlugin: Tempo.Plugin; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js new file mode 100644 index 00000000..5633b49d --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js @@ -0,0 +1,63 @@ +import { asNumber } from '#core/shared/number.library.js'; +import { isNumber, isFunction } from '#core/shared/type.library.js'; +/** + * # TickerPlugin + * Implementation of Tempo.ticker as an optional plugin. + * Extends the Tempo class with pulse-based date-time generators. + */ +export const TickerPlugin = (_options, TempoClass, _factory) => { + /** + * ## Tempo.ticker() + * Emits a pulse of `Tempo` objects at the specified interval. + * All tickers emit their initial state immediately upon initialization (T=0). + * Supports Async Generators (Pattern 1) or callbacks (Pattern 2). + */ + TempoClass.ticker = function (intervalMs, seedOrCallback, callback) { + const interval = asNumber(intervalMs); + if (!isNumber(interval)) + throw new RangeError('Tempo.ticker: intervalMs must be a finite numeric value'); + const [seed, cb] = isFunction(seedOrCallback) + ? [void 0, seedOrCallback] + : [seedOrCallback, callback]; + let current = new TempoClass(seed); + const now = () => globalThis.Temporal.Now.instant().epochMilliseconds; + // Pattern 2 ~ Callbacks + if (isFunction(cb)) { + let id, stopped = (interval === 0); + const start = now(), absInterval = Math.abs(interval); + let ticks = 0; + const stop = Object.assign(() => { + stopped = true; + clearTimeout(id); + }, { [Symbol.dispose]: () => stop() }); + (function tick() { + cb(current.clone(), stop); // unified emission + if (!stopped) { + const delay = Math.max(0, start + (++ticks * absInterval) - now()); + id = setTimeout(() => { + current = current.add({ milliseconds: interval }); // increment (or decrement) + tick(); + }, delay); + } + })(); + return stop; + } + // Pattern 1 ~ Async Generators + const generator = (async function* () { + const start = now(), absInterval = Math.abs(interval); + let ticks = 0; + while (true) { + yield current.clone(); // emit immediately + if (interval === 0) + break; // support for 'emit-once' + const delay = Math.max(0, start + (++ticks * absInterval) - now()); + await new Promise(resolve => setTimeout(resolve, delay)); + current = current.add({ milliseconds: interval }); // increment (or decrement) + } + })(); + return Object.assign(generator, { + [Symbol.asyncDispose]: async () => { await generator.return(void 0); } + }); + }; +}; +//# sourceMappingURL=plugin.ticker.js.map \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js.map b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js.map new file mode 100644 index 00000000..038eb456 --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"plugin.ticker.js","sourceRoot":"","sources":["plugin.ticker.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.d.ts new file mode 100644 index 00000000..0aa9639d --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.d.ts @@ -0,0 +1,157 @@ +import type { Tempo } from '#core/tempo.class.js'; +/** common RegExp patterns */ +export declare const Match: { + /** match all {} pairs, if they start with a word char */ readonly braces: RegExp; + /** named capture-group, if it starts with a letter */ readonly captures: RegExp; + /** event */ readonly event: RegExp; + /** period */ readonly period: RegExp; + /** two digit year */ readonly twoDigit: RegExp; + /** date */ readonly date: RegExp; + /** time */ readonly time: RegExp; + /** hour-minute-second with no separator */ readonly hhmiss: RegExp; + /** separator characters (/ - . ,) */ readonly separator: RegExp; + /** modifier characters (+-<>=) */ readonly modifier: RegExp; + /** offset post keywords (ago|hence) */ readonly affix: RegExp; + /** strip out these characters from a string */ readonly strips: RegExp; + /** whitespace characters */ readonly spaces: RegExp; + /** Z character */ readonly zed: RegExp; +}; +/** Tempo Symbol registry */ +export declare const Token: import("#core/shared/type.library.js").Extend<{ + /** year */ readonly yy: symbol; + /** month */ readonly mm: symbol; + /** day */ readonly dd: symbol; + /** hour */ readonly hh: symbol; + /** minute */ readonly mi: symbol; + /** second */ readonly ss: symbol; + /** fraction */ readonly ff: symbol; + /** meridiem */ readonly mer: symbol; + /** short weekday name */ readonly www: symbol; + /** relative-suffix */ readonly afx: symbol; + /** time-suffix */ readonly sfx: symbol; + /** time unit */ readonly unt: symbol; + /** separator */ readonly sep: symbol; + /** modifier */ readonly mod: symbol; + /** generic number */ readonly nbr: symbol; + /** Tempo event */ readonly evt: symbol; + /** Tempo period */ readonly per: symbol; + /** time zone offset */ readonly tzd: symbol; + /** date */ readonly dt: symbol; + /** time */ readonly tm: symbol; + /** date and time */ readonly dtm: symbol; + /** day-month-year */ readonly dmy: symbol; + /** month-day-year */ readonly mdy: symbol; + /** year-month-day */ readonly ymd: symbol; + /** day of month offset */ readonly off: symbol; + /** weekDay */ readonly wkd: symbol; + /** relative offset (years, days, hours, etc) */ readonly rel: symbol; + /** timezone/calendar brackets */ readonly brk: symbol; +}, string, symbol>; +export type Token = typeof Token; +/** + * user will need to know these in order to configure their own patterns + * Tempo.Snippet is a simple regex pattern object e.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ } + * Tempo.Layout is a string-combination of Snippet names e.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?' + * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex. + * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument + */ +/** + * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy') + */ +export declare const Snippet: import("#core/shared/type.library.js").Extend<{ + readonly [Token.yy]: RegExp; + readonly [Token.mm]: RegExp; + readonly [Token.dd]: RegExp; + readonly [Token.hh]: RegExp; + readonly [Token.mi]: RegExp; + readonly [Token.ss]: RegExp; + readonly [Token.ff]: RegExp; + readonly [Token.mer]: RegExp; + readonly [Token.sfx]: RegExp; + readonly [Token.wkd]: RegExp; + readonly [Token.tzd]: RegExp; + readonly [Token.nbr]: RegExp; + readonly [Token.afx]: RegExp; + readonly [Token.mod]: RegExp; + readonly [Token.sep]: RegExp; + readonly [Token.unt]: RegExp; + readonly [Token.brk]: RegExp; +}, symbol, RegExp>; +export type Snippet = typeof Snippet; +/** + * a {layout} is a Record of snippet-combinations describing an input DateTime argument + * the Layout's keys are in the order that they will be checked against an input value + */ +export declare const Layout: import("#core/shared/type.library.js").Extend<{ + readonly [Token.dt]: "({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))"; + readonly [Token.tm]: "({hh}{mi}?{ss}?{ff}?{mer}?|{per})"; + readonly [Token.dtm]: "({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?"; + readonly [Token.dmy]: "({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"; + readonly [Token.mdy]: "({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"; + readonly [Token.ymd]: "({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"; + readonly [Token.wkd]: "{mod}?{wkd}{afx}?{sfx}?"; + readonly [Token.off]: "{mod}?{dd}{afx}?"; + readonly [Token.rel]: "{nbr}{sep}?{unt}{sep}?{afx}"; +}, symbol, string>; +export type Layout = typeof Layout; +/** + * an {event} is a Record of regex-pattern-like-string keys that describe Date strings. + * values can be a string or a function. + * if assigning a function, use standard 'function()' syntax to allow for 'this' binding. + * also, a function should always have a .toString() method which returns a parse-able Date string + */ +export declare const Event: import("#core/shared/type.library.js").Extend<{ + readonly 'new.?years? ?eve': "31 Dec"; + readonly nye: "31 Dec"; + readonly 'new.?years?( ?day)?': "01 Jan"; + readonly ny: "01 Jan"; + readonly 'christmas ?eve': "24 Dec"; + readonly christmas: "25 Dec"; + readonly 'xmas ?eve': "24 Dec"; + readonly xmas: "25 Dec"; + readonly now: (this: any) => any; + readonly today: (this: any) => any; + readonly tomorrow: (this: any) => any; + readonly yesterday: (this: any) => any; +}, string, string | Function>; +export type Event = typeof Event; +/** + * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings. + * values can be a string or a function. + * if using a function, use regular 'function()' syntax to allow for 'this' binding. + */ +export declare const Period: import("#core/shared/type.library.js").Extend<{ + readonly 'mid[ -]?night': "24:00"; + readonly morning: "8:00"; + readonly 'mid[ -]?morning': "10:00"; + readonly 'mid[ -]?day': "12:00"; + readonly noon: "12:00"; + readonly 'after[ -]?noon': "3:00pm"; + readonly evening: "18:00"; + readonly night: "20:00"; +}, string, string | Function>; +export type Period = typeof Period; +/** + * a {timeZone} alias dictionary mapping common abbreviations to IANA strings. + * Tempo will check this registry to convert abbreviations before passing them to Temporal. + */ +export declare const TimeZone: import("#core/shared/type.library.js").Extend<{ + readonly utc: "UTC"; + readonly gmt: "Europe/London"; + readonly est: "America/New_York"; + readonly cst: "America/Chicago"; + readonly mst: "America/Denver"; + readonly pst: "America/Los_Angeles"; + readonly aest: "Australia/Sydney"; + readonly acst: "Australia/Adelaide"; + readonly awst: "Australia/Perth"; + readonly nzt: "Pacific/Auckland"; + readonly cet: "Europe/Paris"; + readonly eet: "Europe/Helsinki"; + readonly ist: "Asia/Kolkata"; + readonly npt: "Asia/Kathmandu"; + readonly jst: "Asia/Tokyo"; +}, string, string>; +export type TimeZone = typeof TimeZone; +/** Reasonable default options for initial Tempo config */ +export declare const Default: import("#core/shared/type.library.js").SecureObject; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js new file mode 100644 index 00000000..3d8f9159 --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js @@ -0,0 +1,166 @@ +import { looseIndex } from '#core/shared/object.library.js'; +import { secure } from '#core/shared/utility.library.js'; +// BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW +// TEMPO functionality heavily depends on these patterns +/** common RegExp patterns */ +export const Match = { + /** match all {} pairs, if they start with a word char */ braces: /{([\w]+(?:\.[\w]+)*)}/g, + /** named capture-group, if it starts with a letter */ captures: /\(\?<([a-zA-Z][\w]*)>(.*?)(?=) */ modifier: /[\+\-\<\>][\=]?|this|next|prev|last/, + /** offset post keywords (ago|hence) */ affix: /ago|hence/, + /** strip out these characters from a string */ strips: /\(|\)/g, + /** whitespace characters */ spaces: /\s+/g, + /** Z character */ zed: /^Z$/, +}; +/** Tempo Symbol registry */ +export const Token = looseIndex()({ + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols + /** year */ yy: Symbol('yy'), + /** month */ mm: Symbol('mm'), + /** day */ dd: Symbol('dd'), + /** hour */ hh: Symbol('hh'), + /** minute */ mi: Symbol('mi'), + /** second */ ss: Symbol('ss'), + /** fraction */ ff: Symbol('ff'), + /** meridiem */ mer: Symbol('mer'), + /** short weekday name */ www: Symbol('www'), + /** relative-suffix */ afx: Symbol('afx'), + /** time-suffix */ sfx: Symbol('sfx'), + /** time unit */ unt: Symbol('unt'), + /** separator */ sep: Symbol('sep'), + /** modifier */ mod: Symbol('mod'), + /** generic number */ nbr: Symbol('nbr'), + /** Tempo event */ evt: Symbol('evt'), + /** Tempo period */ per: Symbol('per'), + /** time zone offset */ tzd: Symbol('tzd'), + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Layout Symbols + /** date */ dt: Symbol('date'), + /** time */ tm: Symbol('time'), + /** date and time */ dtm: Symbol('dateTime'), + /** day-month-year */ dmy: Symbol('dayMonthYear'), + /** month-day-year */ mdy: Symbol('monthDayYear'), + /** year-month-day */ ymd: Symbol('yearMonthDay'), + /** day of month offset */ off: Symbol('offset'), + /** weekDay */ wkd: Symbol('weekDay'), + /** relative offset (years, days, hours, etc) */ rel: Symbol('relativeOffset'), + /** timezone/calendar brackets */ brk: Symbol('brackets'), +}); +/** + * user will need to know these in order to configure their own patterns + * Tempo.Snippet is a simple regex pattern object e.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ } + * Tempo.Layout is a string-combination of Snippet names e.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?' + * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex. + * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument + */ +/** + * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy') + */ +// Note: computed Components ('evt', 'per') are added during 'Tempo.init()' (for static) and/or 'new Tempo()' (per instance) +export const Snippet = looseIndex()({ + [Token.yy]: /(?([0-9]{2})?[0-9]{2})/, // arbitrary upper-limit of yy=9999 + [Token.mm]: /(?[0\s]?[1-9]|1[0-2]|Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)/, // month-name (abbrev or full) or month-number 01-12 + [Token.dd]: /(?

[0\s]?[1-9]|[12][0-9]|3[01])(?:\s?(?:st|nd|rd|th))?/, // day-number 01-31 + [Token.hh]: /(?2[0-4]|[01]?[0-9])/, // hour-number 00-24 + [Token.mi]: /(\:(?[0-5][0-9]))/, // minute-number 00-59 + [Token.ss]: /(\:(?[0-5][0-9]))/, // seconds-number 00-59 + [Token.ff]: /(\.(?[0-9]{1,9}))/, // fractional-seconds up-to 9-digits + [Token.mer]: /(\s*(?am|pm))/, // meridiem suffix (am,pm) + [Token.sfx]: /((?:{sep}+|T)({tm}){tzd}?)/, // time-pattern suffix 'T {tm} Z' + [Token.wkd]: /(?Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)/, // day-name (abbrev or full) + [Token.tzd]: /(?Z|(?:\+(?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:00)|-(?:(?:0[0-9]|1[0-1]):?[0-5][0-9]|12:00)))/, // time-zone offset +14:00 to -12:00 + [Token.nbr]: /(?[0-9]*)/, // modifier count + [Token.afx]: new RegExp(`((s)? (?${Match.affix.source}))?{sep}?`), // affix optional plural 's' and (ago|hence) + [Token.mod]: new RegExp(`((?${Match.modifier.source})?{nbr} *)`), // modifier (+,-,<,<=,>,>=) plus optional offset-count + [Token.sep]: new RegExp(`(?:${Match.separator.source})`), // date-input separator character "/\\-., " (non-capture group) + [Token.unt]: /(?year|month|week|day|hour|minute|second|millisecond)(?:s)?/, // useful for '2 days ago' etc + [Token.brk]: /(\[(?[^\]]+)\](?:\[(?[^\]]+)\])?)?/, // timezone/calendar brackets [...] +}); +/** + * a {layout} is a Record of snippet-combinations describing an input DateTime argument + * the Layout's keys are in the order that they will be checked against an input value + */ +export const Layout = looseIndex()({ + [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))', // calendar or event + [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period + [Token.dtm]: '({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?', // calendar/event and clock/period + [Token.dmy]: '({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?', // day-month(-year) + [Token.mdy]: '({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?', // month-day(-year) + [Token.ymd]: '({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?', // year-month(-day) + [Token.wkd]: '{mod}?{wkd}{afx}?{sfx}?', // special layout (no {dt}!) used for weekday calcs (only one that requires {wkd} pattern) + [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset + [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago) +}); +/** + * an {event} is a Record of regex-pattern-like-string keys that describe Date strings. + * values can be a string or a function. + * if assigning a function, use standard 'function()' syntax to allow for 'this' binding. + * also, a function should always have a .toString() method which returns a parse-able Date string + */ +export const Event = looseIndex()({ + 'new.?years? ?eve': '31 Dec', + 'nye': '31 Dec', + 'new.?years?( ?day)?': '01 Jan', + 'ny': '01 Jan', + 'christmas ?eve': '24 Dec', + 'christmas': '25 Dec', + 'xmas ?eve': '24 Dec', + 'xmas': '25 Dec', + 'now': function () { return this.toPlainDateTime(); }, + 'today': function () { return this.toPlainDate(); }, + 'tomorrow': function () { return this.toPlainDate().add({ days: 1 }); }, + 'yesterday': function () { return this.toPlainDate().add({ days: -1 }); }, +}); +/** + * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings. + * values can be a string or a function. + * if using a function, use regular 'function()' syntax to allow for 'this' binding. + */ +export const Period = looseIndex()({ + 'mid[ -]?night': '24:00', + 'morning': '8:00', + 'mid[ -]?morning': '10:00', + 'mid[ -]?day': '12:00', + 'noon': '12:00', + 'after[ -]?noon': '3:00pm', + 'evening': '18:00', + 'night': '20:00', +}); +/** + * a {timeZone} alias dictionary mapping common abbreviations to IANA strings. + * Tempo will check this registry to convert abbreviations before passing them to Temporal. + */ +export const TimeZone = looseIndex()({ + 'utc': 'UTC', + 'gmt': 'Europe/London', + 'est': 'America/New_York', + 'cst': 'America/Chicago', + 'mst': 'America/Denver', + 'pst': 'America/Los_Angeles', + 'aest': 'Australia/Sydney', + 'acst': 'Australia/Adelaide', + 'awst': 'Australia/Perth', + 'nzt': 'Pacific/Auckland', + 'cet': 'Europe/Paris', + 'eet': 'Europe/Helsinki', + 'ist': 'Asia/Kolkata', + 'npt': 'Asia/Kathmandu', + 'jst': 'Asia/Tokyo', +}); +/** Reasonable default options for initial Tempo config */ +export const Default = secure({ + /** log to console */ debug: false, + /** catch or throw Errors */ catch: false, + /** used to parse two-digit years*/ pivot: 75, /** @link https://en.wikipedia.org/wiki/Date_windowing */ + /** precision to measure timestamps (ms | us) */ timeStamp: 'ms', + /** calendaring system */ calendar: 'iso8601', + /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https://en.wikipedia.org/wiki/Date_format_by_country */ + /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']], +}); +//# sourceMappingURL=tempo.default.js.map \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js.map b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js.map new file mode 100644 index 00000000..3084b2b6 --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tempo.default.js","sourceRoot":"","sources":["tempo.default.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.d.ts new file mode 100644 index 00000000..6da1cf1e --- /dev/null +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.d.ts @@ -0,0 +1,111 @@ +import type { KeyOf, ValueOf, LooseUnion } from '#core/shared/type.library.js'; +/** + * Various enumerations used throughout Tempo library. + * These are exported and added as static getters of the Tempo class. + * Usage example: + ```typescript + const dayNames = Tempo.WEEKDAY.keys(); // ['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + ``` + */ +/** */ +export declare const WEEKDAY: import("#core/shared/enumerate.library.js").Enum.wrap>; +export declare const WEEKDAYS: import("#core/shared/enumerate.library.js").Enum.wrap>; +export type WEEKDAY = KeyOf; +export type WEEKDAYS = KeyOf; +export type Weekday = ValueOf; +export declare const MONTH: import("#core/shared/enumerate.library.js").Enum.wrap>; +export declare const MONTHS: import("#core/shared/enumerate.library.js").Enum.wrap>; +export type MONTH = KeyOf; +export type MONTHS = KeyOf; +export type Month = ValueOf; +export declare const SEASON: import("#core/shared/enumerate.library.js").Enum.wrap<{ + readonly Summer: "summer"; + readonly Autumn: "autumn"; + readonly Winter: "winter"; + readonly Spring: "spring"; +}>; +export declare const COMPASS: import("#core/shared/enumerate.library.js").Enum.wrap<{ + readonly North: "north"; + readonly East: "east"; + readonly South: "south"; + readonly West: "west"; +}>; +export type SEASON = ValueOf; +export type COMPASS = ValueOf; +/** number of seconds in a time unit */ +export declare const DURATION: import("#core/shared/enumerate.library.js").Enum.wrap<{ + /** approx number of seconds in a year */ readonly year: 31536000; + /** approx number of seconds in a month */ readonly month: 2628000; + /** number of seconds in a week */ readonly week: 604800; + /** number of seconds in a day */ readonly day: 86400; + /** number of seconds in an hour */ readonly hour: 3600; + /** number of seconds in a minute */ readonly minute: 60; + /** one second */ readonly second: 1; + /** number of seconds in a millisecond */ readonly millisecond: 0.001; + /** number of seconds in a microsecond */ readonly microsecond: 0.000001; + /** number of seconds in a nanosecond */ readonly nanosecond: 1e-9; +}>; +/** number of milliseconds in a time unit */ +export declare const DURATIONS: import("#core/shared/enumerate.library.js").Enum.wrap<{ + /** approx number of milliseconds in a year */ readonly years: number; + /** approx number of milliseconds in a month */ readonly months: number; + /** number of milliseconds in a week */ readonly weeks: number; + /** number of milliseconds in a day */ readonly days: number; + /** number of milliseconds in an hour */ readonly hours: number; + /** number of milliseconds in a minute */ readonly minutes: number; + /** number of milliseconds in a second */ readonly seconds: number; + /** one millisecond */ readonly milliseconds: number; + /** number of milliseconds in a microsecond */ readonly microseconds: number; + /** number of milliseconds in a nanosecond */ readonly nanoseconds: number; +}>; +export type DURATION = KeyOf; +export type DURATIONS = KeyOf; +/** pre-defined Format code short-cuts */ +export declare const FORMAT: import("#core/shared/enumerate.library.js").Enum.wrap<{ + /** useful for standard date display */ readonly display: "{www}, {dd} {mmm} {yyyy}"; + /** useful for standard datestamps */ readonly weekDate: "{www}, {yyyy}-{mmm}-{dd}"; + /** useful for standard timestamps */ readonly weekTime: "{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"; + /** useful for standard full timestamps */ readonly weekStamp: "{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"; + /** useful for readable month and day */ readonly dayMonth: "{dd}-{mmm}"; + /** useful for Date */ readonly dayDate: "{dd}-{mmm}-{yyyy}"; + /** display with Time */ readonly dayTime: "{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"; + /** useful for stamping logs */ readonly logStamp: "{yyyy}{mm}{dd}T{hhmiss}.{ff}"; + /** useful for sorting display-strings */ readonly sortTime: "{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"; + /** useful for sorting week order */ readonly yearWeek: "{wy}{ww}"; + /** useful for sorting month order */ readonly yearMonth: "{yyyy}{mm}"; + /** useful for sorting date order */ readonly yearMonthDay: "{yyyy}{mm}{dd}"; + /** just Date portion */ readonly date: "{yyyy}-{mm}-{dd}"; + /** just Time portion */ readonly time: "{hh}:{mi}:{ss}"; +}>; +export type FORMAT = ValueOf; +export type Format = LooseUnion>; +export declare const LIMIT: import("#core/shared/type.library.js").SecureObject<{ + /** Tempo(31-Dec-9999.23:59:59).ns */ readonly maxTempo: any; + /** Tempo(01-Jan-1000.00:00:00).ns */ readonly minTempo: any; +}>; +export declare const ELEMENT: import("#core/shared/enumerate.library.js").Enum.wrap<{ + readonly yy: "year"; + readonly mm: "month"; + readonly ww: "week"; + readonly dd: "day"; + readonly hh: "hour"; + readonly mi: "minute"; + readonly ss: "second"; + readonly ms: "millisecond"; + readonly us: "microsecond"; + readonly ns: "nanosecond"; +}>; +export type ELEMENT = ValueOf; +export type Element = KeyOf; +export declare const MUTATION: any; +export type MUTATION = ValueOf; +export type Mutation = KeyOf; +export declare const ZONED_DATE_TIME: any; +export type ZONED_DATE_TIME = ValueOf; +export type ZonedDateTime = KeyOf; +export declare const OPTION: import("#core/shared/enumerate.library.js").Enum.wrap>; +export type OPTION = typeof OPTION; +export type Option = KeyOf
[0\s]?[1-9]|[12][0-9]|3[01])(?:\s?(?:st|nd|rd|th))?/, // day-number 01-31 + [Token.hh]: /(?2[0-4]|[01]?[0-9])/, // hour-number 00-24 + [Token.mi]: /(\:(?[0-5][0-9]))/, // minute-number 00-59 + [Token.ss]: /(\:(?[0-5][0-9]))/, // seconds-number 00-59 + [Token.ff]: /(\.(?[0-9]{1,9}))/, // fractional-seconds up-to 9-digits + [Token.mer]: /(\s*(?am|pm))/, // meridiem suffix (am,pm) + [Token.sfx]: /((?:{sep}+|T)({tm}){tzd}?)/, // time-pattern suffix 'T {tm} Z' + [Token.wkd]: /(?Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)/, // day-name (abbrev or full) + [Token.tzd]: /(?Z|(?:\+(?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:00)|-(?:(?:0[0-9]|1[0-1]):?[0-5][0-9]|12:00)))/, // time-zone offset +14:00 to -12:00 + [Token.nbr]: /(?[0-9]*)/, // modifier count + [Token.afx]: new RegExp(`((s)? (?${Match.affix.source}))?{sep}?`), // affix optional plural 's' and (ago|hence) + [Token.mod]: new RegExp(`((?${Match.modifier.source})?{nbr} *)`), // modifier (+,-,<,<=,>,>=) plus optional offset-count + [Token.sep]: new RegExp(`(?:${Match.separator.source})`), // date-input separator character "/\\-., " (non-capture group) + [Token.unt]: /(?year|month|week|day|hour|minute|second|millisecond)(?:s)?/, // useful for '2 days ago' etc + [Token.brk]: /(\[(?[^\]]+)\](?:\[(?[^\]]+)\])?)?/, // timezone/calendar brackets [...] +}); +/** + * a {layout} is a Record of snippet-combinations describing an input DateTime argument + * the Layout's keys are in the order that they will be checked against an input value + */ +const Layout = looseIndex()({ + [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))', // calendar or event + [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period + [Token.dtm]: '({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?', // calendar/event and clock/period + [Token.dmy]: '({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?', // day-month(-year) + [Token.mdy]: '({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?', // month-day(-year) + [Token.ymd]: '({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?', // year-month(-day) + [Token.wkd]: '{mod}?{wkd}{afx}?{sfx}?', // special layout (no {dt}!) used for weekday calcs (only one that requires {wkd} pattern) + [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset + [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago) +}); +/** + * an {event} is a Record of regex-pattern-like-string keys that describe Date strings. + * values can be a string or a function. + * if assigning a function, use standard 'function()' syntax to allow for 'this' binding. + * also, a function should always have a .toString() method which returns a parse-able Date string + */ +const Event = looseIndex()({ + 'new.?years? ?eve': '31 Dec', + 'nye': '31 Dec', + 'new.?years?( ?day)?': '01 Jan', + 'ny': '01 Jan', + 'christmas ?eve': '24 Dec', + 'christmas': '25 Dec', + 'xmas ?eve': '24 Dec', + 'xmas': '25 Dec', + 'now': function () { return this.toPlainDateTime(); }, + 'today': function () { return this.toPlainDate(); }, + 'tomorrow': function () { return this.toPlainDate().add({ days: 1 }); }, + 'yesterday': function () { return this.toPlainDate().add({ days: -1 }); }, +}); +/** + * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings. + * values can be a string or a function. + * if using a function, use regular 'function()' syntax to allow for 'this' binding. + */ +const Period = looseIndex()({ + 'mid[ -]?night': '24:00', + 'morning': '8:00', + 'mid[ -]?morning': '10:00', + 'mid[ -]?day': '12:00', + 'noon': '12:00', + 'after[ -]?noon': '3:00pm', + 'evening': '18:00', + 'night': '20:00', +}); +/** + * a {timeZone} alias dictionary mapping common abbreviations to IANA strings. + * Tempo will check this registry to convert abbreviations before passing them to Temporal. + */ +const TimeZone = looseIndex()({ + 'utc': 'UTC', + 'gmt': 'Europe/London', + 'est': 'America/New_York', + 'cst': 'America/Chicago', + 'mst': 'America/Denver', + 'pst': 'America/Los_Angeles', + 'aest': 'Australia/Sydney', + 'acst': 'Australia/Adelaide', + 'awst': 'Australia/Perth', + 'nzt': 'Pacific/Auckland', + 'cet': 'Europe/Paris', + 'eet': 'Europe/Helsinki', + 'ist': 'Asia/Kolkata', + 'npt': 'Asia/Kathmandu', + 'jst': 'Asia/Tokyo', +}); +/** Reasonable default options for initial Tempo config */ +const Default = secure({ + /** log to console */ debug: false, + /** catch or throw Errors */ catch: false, + /** used to parse two-digit years*/ pivot: 75, /** @link https://en.wikipedia.org/wiki/Date_windowing */ + /** precision to measure timestamps (ms | us) */ timeStamp: 'ms', + /** calendaring system */ calendar: 'iso8601', + /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https://en.wikipedia.org/wiki/Date_format_by_country */ + /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']], +}); + +/** provide a sort-function to order a set of keys */ +function sortBy(...keys) { + const sortOptions = keys // coerce string => SortBy + .flat() // flatten Array-of-Array + .map(key => isObject(key) ? key : { field: stringify(key) }); // build Array of sort-options + return (left, right) => { + let result = 0; // 0 = same, -1 = leftright + sortOptions.forEach(key => { + if (result === 0) { // no need to look further if result !== 0 + const dir = key.dir === 'desc' ? -1 : 1; + const field = key.field + (key.index ? `[${key.index}]` : ''); + const valueA = extract(left, field, nullToValue(key.default, 0)); + const valueB = extract(right, field, nullToValue(key.default, 0)); + switch (true) { + case isNumber(valueA) && isNumber(valueB): + case isDate(valueA) && isDate(valueB): + case isTempo$1(valueA) && isTempo$1(valueB): + result = dir * (valueA - valueB); + break; + default: + result = dir * asString(valueA)?.localeCompare(asString(valueB)); + break; + } + } + }); + return result; + }; +} +/** return an array sorted-by a series of keys */ +function sortKey(array, ...keys) { + return array.sort(sortBy(...keys)); +} +function byKey(arr, fnKey, ...keys) { + if (isFunction(fnKey)) + return Object.groupBy(arr, fnKey); + const keyed = [fnKey] // mapFn is a keyof T + .concat(keys) // append any trailing keyof T[] + .flat(); // flatten Array-of-Array + return Object.groupBy(arr, itm => // group an array into an object with named keys + keyed + .map(key => isUndefined(itm[key]) ? '' : stringify(itm[key])) + .join('.')); +} +function byLkp(arr, fnKey, ...keys) { + const group = isFunction(fnKey) + ? byKey(arr, fnKey) // group by the callback function + : byKey(arr, fnKey, ...keys); // group by the list of keys + return ownEntries(group) + .reduce((acc, [key, grp]) => Object.assign(acc, { [key]: grp?.pop() }), {}); +} + +// Prototype extensions +// Remember to define any imports as a Function Declaration (not a Function Expression) +// so that they are 'hoisted' prior to extending a prototype +/** + * extend an Object's prototype to include new method, if no clash + */ +const patch = (proto, property, method) => { + if (Object.hasOwn(proto.prototype, property)) { // if already defined, + if (trimAll(method.toString()) !== trimAll(proto.prototype?.[property]?.toString())) + console.warn(`${proto.name}.${property} already defined`); // show warning if different method definition + } + else { + Object.defineProperty(proto.prototype, property, { + configurable: false, + enumerable: false, + writable: false, + value: method, + }); + } +}; +patch(String, 'trimAll', function (pat) { return trimAll(this, pat); }); +patch(String, 'toProperCase', function () { return toProperCase(this); }); +function sorted(...keys) { return sortKey(this, ...keys); } +patch(Array, 'orderBy', sorted); // order array by named keys +patch(Array, 'sortBy', sorted); // sort array by named keys +function keyed(...keys) { return byKey(this, ...keys); } +function lookup(...keys) { return byLkp(this, ...keys); } +patch(Array, 'keyedBy', keyed); // reduce array by named keys +patch(Array, 'lookupBy', lookup); // reduce array by named keys, only one entry per key +patch(Array, 'tap', function (fn) { + fn(this); // run an arbitrary function + return this; // then return the original array +}); +patch(Array, 'clear', function () { + this.fill(null).length = 0; // wipe the contents, then set the 'length' to zero + return this; +}); +patch(Array, 'distinct', function (mapfn) { + return mapfn + ? this.map(mapfn).distinct() // run the mapping selector, then recurse + : Array.from(new Set(this)); // eliminate duplicates +}); +patch(Array, 'cartesian', function (...args) { + const [a, b = [], ...c] = args.length === 0 ? this : args; + const cartFn = (a, b) => asArray([]).concat(...a.map(d => b.map(e => asArray([]).concat(d, e)))); + return b.length + ? this.cartesian(cartFn(a, b), ...c) // run the cartFn function, then recurse + : asArray(a || []); // return the collated result +}); + +// #region Const variables +/** key to use for storage / globalThis Symbol */ const $Tempo = Symbol.for('$Tempo'); +/** current execution context*/ const Context = getContext(); +// #endregion Const variables +/** + * # Tempo + * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. + * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. + */ +let Tempo = (() => { + var _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns; + let _classDecorators = [Serializable, Immutable]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + var Tempo = class { + static { _classThis = this; } + static { __setFunctionName(this, "Tempo"); } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + Tempo = _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + } + // #region Static enum properties~~~~~~~~~~~~~~~~~~~~~~~~~ + /** Weekday names (short-form) */ static get WEEKDAY() { return WEEKDAY; } + /** Weekday names (long-form) */ static get WEEKDAYS() { return WEEKDAYS; } + /** Month names (short-form) */ static get MONTH() { return MONTH; } + /** Month names (long-form) */ static get MONTHS() { return MONTHS; } + /** Time durations as seconds (singular) */ static get DURATION() { return DURATION; } + /** Time durations as milliseconds (plural) */ static get DURATIONS() { return DURATIONS; } + /** Quarterly Seasons */ static get SEASON() { return SEASON; } + /** Compass cardinal points */ static get COMPASS() { return COMPASS; } + /** Tempo to Temporal DateTime Units map */ static get ELEMENT() { return ELEMENT; } + /** Pre-configured format {name -> string} pairs */ static get FORMAT() { return __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.formats; } + /** some useful Dates */ static get LIMIT() { return LIMIT; } + static { + // #endregion + // #region Static private properties~~~~~~~~~~~~~~~~~~~~~~ + _Tempo_dbg = { value: new Logify('Tempo', { + debug: Default?.debug ?? false, + catch: Default?.catch ?? false + }) }; + } + static { + /** Tempo state for the global configuration */ _Tempo_global = { value: {} }; + } + static { + /** a collection of parse rule-matches */ _Tempo_pending = { value: void 0 }; + } + static { + /** cache for next-available 'usr' Token key */ _Tempo_usrCount = { value: 0 }; + } + static { + /** mutable list of registered term plugins */ _Tempo_terms = { value: [] }; + } + static { + /** try to infer hemisphere using the timezone's daylight-savings setting */ + _Tempo_setSphere = { value: (shape, options) => { + if (isUndefined(shape.config.timeZone) || __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, options, 'sphere')) + return shape.config.sphere; // already specified or no timeZone to calculate from + // use a fixed date (2024-01-01) to compare offsets for hemisphere detection + const zdt = new Temporal.ZonedDateTime(BigInt(1_704_067_200) * BigInt(1_000_000_000), shape.config.timeZone); + const jan = zdt.with({ day: 1, month: 1 }).offsetNanoseconds; + const jun = zdt.with({ day: 1, month: 6 }).offsetNanoseconds; + const dst = Math.sign(jan - jun); // timeZone offset difference between Jan and Jun + switch (dst) { + case -1: + return Tempo.COMPASS.North; // clock moves backward in Northern hemisphere + case 1: + return Tempo.COMPASS.South; // clock moves forward in Southern hemisphere + case 0: + default: + return void 0; // timeZone does not observe DST + } + } }; + } + static { + /** properCase week-day / calendar-month */ + _Tempo_prefix = { value: (str) => toProperCase(String(str).substring(0, 3)) }; + } + static { + /** get first Canonical name of a supplied locale */ + _Tempo_locale = { value: (locale) => { + let language; + try { // lookup locale + language = Intl.getCanonicalLocales(locale.replace('_', '-'))[0]; + } + catch (error) { } // catch unknown locale + const global = Context.global; + return language ?? + global?.navigator?.languages?.[0] ?? // fallback to current first navigator.languages[] + global?.navigator?.language ?? // else navigator.language + Default.locale ?? // else default locale + locale; // cannot determine locale + } }; + } + // #endregion Static private methods + // #region Static public methods~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** + * Bootstrap the library with a Custom Global Discovery object. + * + * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern + * and automatically calls `Tempo.init()` to apply the discovered configuration. + * + * @param config - The Global Discovery object to register. + * @returns The resolved global configuration. + */ + static discover(config) { + globalThis[$Tempo] = config; + return this.init(); + } + /** + * Initializes the global default configuration for all subsequent `Tempo` instances. + * + * Settings are inherited in this priority: + * 1. Reasonable library defaults (defined in tempo.config.js) + * 2. Persistent storage (e.g. localStorage), if available. + * 3. `options` provided to this method. + * + * @param options - Configuration overrides to apply globally. + * @returns The resolved global configuration. + */ + static init(options = {}) { + if (isEmpty(options)) { // if no options supplied, reset all + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse = { + snippet: Object.assign({}, Snippet), + layout: Object.assign({}, Layout), + event: Object.assign({}, Event), + period: Object.assign({}, Period), + mdyLocales: __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_mdyLocales).call(Tempo, Default.mdyLocales), + mdyLayouts: asArray(Default.mdyLayouts), + pivot: Default.pivot, + }; + const { timeZone, calendar } = Intl.DateTimeFormat().resolvedOptions(); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config = Object.assign({}, omit({ ...Default }, ...PARSE.keys()), // use Default as base, omit parse-related + { + calendar, + timeZone, + locale: __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_locale).call(Tempo), + discovery: Symbol.keyFor($Tempo), + formats: Object.create(FORMAT), + scope: 'global' + }); + __classPrivateFieldSet(Tempo, _classThis, 0, "f", _Tempo_usrCount); // reset user-key counter + for (const key of Object.keys(Token)) // purge user-allocated Tokens + if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys + delete Token[key]; + Tempo.addTerm(...registerTerms); // register built-in term plugins + const storeKey = Symbol.keyFor($Tempo); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), $Tempo)); + } + else { + const discovery = options.discovery ?? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.discovery ?? Symbol.keyFor($Tempo); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), discovery), options); + } + if (Context.type === CONTEXT.Browser || options.debug === true) + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(Tempo.config, 'Tempo:', __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config); + return Tempo.config; + } + /** release global config and reset library to defaults */ + static [(_Tempo_proto = function _Tempo_proto(obj) { return Object.getPrototypeOf(obj); }, _Tempo_hasOwn = function _Tempo_hasOwn(obj, key) { return Object.hasOwn(obj, key); }, _Tempo_isLocal = function _Tempo_isLocal(shape) { return shape.config.scope === 'local'; }, _Tempo_create = function _Tempo_create(obj, name) { return Object.create(__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, obj)[name]); }, _Tempo_setEvents = function _Tempo_setEvents(shape) { + const events = ownEntries(shape.parse.event, true); + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'event') && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'isMonthDay')) + return; // no local change needed + const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal + const groups = events + .map(([pat, _], idx) => `(?<${src}evt${idx}>${pat})`) // assign a number to the pattern + .join('|'); // make an 'Or' pattern for the event-keys + if (groups) { + const protoEvt = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.evt]?.source; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || groups !== protoEvt) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet')) + shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'snippet'); + Object.defineProperty(shape.parse.snippet, Token.evt, { + value: new RegExp(groups), + enumerable: true, + writable: true, + configurable: true + }); + } + } + if (shape.parse.isMonthDay) { + const protoDt = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.layout)[Token.dt]; + const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})'; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || localDt !== protoDt) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout')) + shape.parse.layout = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'layout'); + Object.defineProperty(shape.parse.layout, Token.dt, { + value: localDt, + enumerable: true, + writable: true, + configurable: true + }); + } + } + }, _Tempo_setPeriods = function _Tempo_setPeriods(shape) { + const periods = ownEntries(shape.parse.period, true); + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'period')) + return; // no local change needed + const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal + const groups = periods + .map(([pat, _], idx) => `(?<${src}per${idx}>${pat})`) // {pattern} is the 1st element of the tuple + .join('|'); // make an 'or' pattern for the period-keys + if (groups) { + const protoPer = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.per]?.source; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || groups !== protoPer) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet')) + shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'snippet'); + Object.defineProperty(shape.parse.snippet, Token.per, { + value: new RegExp(groups), + enumerable: true, + writable: true, + configurable: true + }); + } + } + }, _Tempo_isMonthDay = function _Tempo_isMonthDay(shape) { + const monthDay = [...asArray(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.mdyLocales)]; + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales')) + monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global) + return monthDay.some(mdy => { + const tzs = mdy.timeZones ?? mdy.getTimeZones?.() ?? []; + return tzs.includes(shape.config.timeZone); + }); + }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) { + const layouts = ownEntries(shape.parse.layout); // get entries of Layout Record + const swap = shape.parse.mdyLayouts; // get the swap-tuple + let chg = false; // no need to rebuild, if no change + swap + .forEach(([dmy, mdy]) => { + const idx1 = layouts.findIndex(([key]) => key.description === dmy); // 1st swap element exists in {layouts} + const idx2 = layouts.findIndex(([key]) => key.description === mdy); // 2nd swap element exists in {layouts} + if (idx1 === -1 || idx2 === -1) + return; // no pair to swap + const swap1 = (idx1 < idx2) && shape.parse.isMonthDay; // we prefer {mdy} and the 1st tuple was found earlier than the 2nd + const swap2 = (idx1 > idx2) && !shape.parse.isMonthDay; // we dont prefer {mdy} and the 1st tuple was found later than the 2nd + if (swap1 || swap2) { // since {layouts} is an array, ok to swap by-reference + [layouts[idx1], layouts[idx2]] = [layouts[idx2], layouts[idx1]]; + chg = true; + } + }); + if (chg) + shape.parse.layout = Object.fromEntries(layouts); // rebuild Layout in new parse order + }, _Tempo_setConfig = function _Tempo_setConfig(shape, ...options) { + const mergedOptions = Object.assign({}, ...options); + if (isEmpty(mergedOptions)) // nothing to do + return; + if (mergedOptions.store) // check for local-storage + Object.assign(mergedOptions, { ...Tempo.readStore(mergedOptions.store), ...mergedOptions }); + /** helper to normalize snippet/layout Options into the target Config */ + const collect = (target, value, convert) => { + const itm = asType(value); + target ??= {}; + switch (itm.type) { + case 'Object': + ownEntries(itm.value) + .forEach(([k, v]) => target[Tempo.getSymbol(k)] = convert(v)); + break; + case 'String': + case 'RegExp': + target[Tempo.getSymbol()] = convert(itm.value); + break; + case 'Array': + itm.value.forEach(elm => collect(target, elm, convert)); + break; + } + }; + ownEntries(mergedOptions) + .forEach(([optKey, optVal]) => { + if (isUndefined(optVal)) + return; // skip undefined values + const arg = asType(optVal); + switch (optKey) { + case 'snippet': + case 'layout': + case 'event': + case 'period': + // lazy-shadowing: only create local object if it doesn't already exist on local shape + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, optKey)) + shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, optKey); + const rule = shape.parse[optKey]; + if (['snippet', 'layout'].includes(optKey)) { + collect(rule, arg.value, v => optKey === 'snippet' + ? isRegExp(v) ? v : new RegExp(v) + : isRegExp(v) ? v.source : v); + } + else { + asArray(arg.value) + .forEach(elm => ownEntries(elm).forEach(([key, val]) => rule[key] = val)); + } + break; + case 'mdyLocales': + shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_mdyLocales).call(Tempo, arg.value); + break; + case 'mdyLayouts': // these are the 'layouts' that need to swap parse-order + shape.parse[optKey] = asArray(arg.value); + break; + case 'pivot': + shape.parse["pivot"] = Number(arg.value); + break; + case 'config': + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, shape, arg.value); + break; + case 'timeZone': + const zone = String(arg.value).toLowerCase(); + shape.config.timeZone = TimeZone[zone] ?? arg.value; + break; + case 'formats': + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.config, 'formats')) + shape.config.formats = shape.config.formats.extend({}); // shadow parent prototype + if (isObject(arg.value)) + shape.config.formats = shape.config.formats.extend(arg.value); + break; + case 'discovery': + shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal; + break; + case 'plugins': + asArray(optVal).forEach(p => this.extend(p)); + break; + case 'anchor': + break; // internal anchor used for relativity parsing + default: // else just add to config + Object.assign(shape.config, { [optKey]: optVal }); + break; + } + }); + const isMonthDay = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isMonthDay).call(Tempo, shape); + if (isMonthDay !== __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local' + shape.parse.isMonthDay = isMonthDay; + shape.config.sphere = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_setSphere).call(Tempo, shape, mergedOptions); + if (isDefined(shape.parse.mdyLayouts)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_swapLayout).call(Tempo, shape); + if (isDefined(shape.parse.event)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setEvents).call(Tempo, shape); + if (isDefined(shape.parse.period)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setPeriods).call(Tempo, shape); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setPatterns).call(Tempo, shape); // setup Regex DateTime patterns + }, _Tempo_mdyLocales = function _Tempo_mdyLocales(value) { + return asArray(value) + .map(mdy => new Intl.Locale(mdy)) + .map(mdy => ({ locale: mdy.baseName, timeZones: mdy.getTimeZones?.() ?? [] })); + }, _Tempo_setDiscovery = function _Tempo_setDiscovery(shape, key = shape.config.discovery ?? $Tempo) { + const sym = isString(key) ? Symbol.for(key) : key; + const discovery = globalThis[sym]; + if (!isObject(discovery)) + return {}; + // 1. Process TimeZones (normalize to lowercase for lookup) + const timeZones = discovery.timeZones ?? {}; + for (const [key, value] of Object.entries(timeZones)) + TimeZone[key.toLowerCase()] = value; + // 2. Process Terms + if (discovery.terms) + Tempo.addTerm(...asArray(discovery.terms)); + // 3. Process Formats + if (discovery.formats) + shape.config.formats = shape.config.formats.extend(discovery.formats); + // 4. Process Plugins + if (discovery.plugins) + asArray(discovery.plugins).forEach(p => this.extend(p)); + // 4. Process Options + let opts = discovery.options || {}; + return isFunction(opts) ? opts() : opts; + }, _Tempo_setPatterns = function _Tempo_setPatterns(shape) { + const snippet = shape.parse.snippet; + // if local and no snippet or layout overrides, we can just use the prototype's patterns + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet') && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout')) + return; + // ensure we have our own Map to mutate (shadow if local) + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'pattern')) + shape.parse.pattern = new Map(); + shape.parse.pattern.clear(); // reset {pattern} Map + for (const [sym, layout] of ownEntries(shape.parse.layout, true)) + shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet)); + }, Symbol.dispose)]() { Tempo.init(); } + /** + * Extends the Tempo class with new functionality. + * Plugins can add static or instance methods to the library. + */ + static extend(plugin, options) { + const p = plugin; + if (!p.installed) { + p(options, this, (val) => new this(val)); + p.installed = true; + } + return this; + } + /** Reads options from persistent storage (e.g., localStorage). */ + static readStore(key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { + return getStorage(key, {}); + } + /** Writes configuration into persistent storage. */ + static writeStore(config, key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { + return setStorage(key, config); + } + /** lookup or registers a new `Symbol` for a given key. */ + static getSymbol(key) { + var _b, _c; + if (isUndefined(key)) { + const usr = `usr.${__classPrivateFieldSet(_b = Tempo, _classThis, (_c = __classPrivateFieldGet(_b, _classThis, "f", _Tempo_usrCount), ++_c), "f", _Tempo_usrCount)}`; // allocate a prefixed 'user' key + return Token[usr] = Symbol(usr); // add to Symbol register + } + if (isSymbol(key)) + return key; + if (isString(key) && key.includes('.')) { + const description = key.split('.').pop(); // use last segment as description + return Token[key] ??= Symbol(description); + } + return Token[key] ?? Symbol.for(`$Tempo.${key}`); + } + /** translates {layout} into an anchored, case-insensitive RegExp. */ + static regexp(layout, snippet) { + // helper function to replace {name} placeholders with their corresponding snippets + function matcher(str, depth = 0) { + if (depth > 12) + return isRegExp(str) ? str.source : str; // depth guard + let source = isRegExp(str) ? str.source : str; + if (isRegExpLike(source)) // string that looks like a RegExp + source = source.substring(1, source.length - 1); // remove the leading/trailing "/" + if (source.startsWith('^') && source.endsWith('$')) + source = source.substring(1, source.length - 1); // remove the leading/trailing anchors (^ $) + return source.replace(Match.braces, (match, name) => { + const token = Tempo.getSymbol(name); // get the symbol for this {name} + const customs = snippet?.[token]?.source ?? snippet?.[name]?.source; + const globals = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.snippet[token]?.source ?? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.snippet[name]?.source; + const layout = Layout[token]; // get resolution source (layout) + let res = customs ?? globals ?? layout; // get the snippet/layout source + if (isNullish(res) && name.includes('.')) { // if no definition found, try fallback + const prefix = name.split('.')[0]; // get the base token name + const pToken = Tempo.getSymbol(prefix); + res = snippet?.[pToken]?.source ?? snippet?.[prefix]?.source + ?? Snippet[pToken]?.source ?? Snippet[prefix]?.source + ?? Layout[pToken]; + } + if (res && name.includes('.')) { // wrap dotted extensions for identification + const safeName = name.replace(/\./g, '_'); + if (!res.startsWith(`(?<${safeName}>`)) + res = `(?<${safeName}>${res})`; + } + return (isNullish(res) || res === match) // if no definition found, + ? match // return the original match + : matcher(res, depth + 1); // else recurse to see if snippet contains embedded "{}" pairs + }); + } + layout = matcher(layout); // initiate the layout-parse + return new RegExp(`^(${layout})$`, 'i'); // translate the source into a regex + } + /** Compares two `Tempo` instances or date-time values. */ + static compare(tempo1, tempo2) { + const one = new Tempo(tempo1), two = new Tempo(tempo2); + return Number((one.nano > two.nano) || -(one.nano < two.nano)) + 0; + } + /** global Tempo configuration */ + static get config() { + return getProxy(omit({ ...__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config }, 'value')); + } + /** global discovery configuration */ + static get discovery() { + const sym = Symbol.for(this.config.discovery); + return getProxy(omit({ ...globalThis[sym], scope: 'discovery' }, 'value')); + } + /** + * Returns a snapshot of the configuration layers used by Tempo. + * Useful for debugging how the final configuration is built. + */ + static get options() { + const keyFor = this.config.store ?? Symbol.keyFor($Tempo); + return { + default: this.default, + discovery: this.discovery, + storage: getProxy(Object.assign({ key: keyFor, scope: 'storage' }, omit(Tempo.readStore(keyFor), 'value'))), + global: this.config, + }; + } + static from(tempo, options) { return new this(tempo, options); } + static now() { return Temporal.Now.instant().epochNanoseconds; } + /** static Tempo.terms getter */ + static get terms() { + return secure(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) + .map(({ define, ...rest }) => rest)); // omit the 'define' method + } + /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ + static addTerm(...plugin) { + asArray(plugin) + .flat(1) + .forEach(p => { + if (!__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).some(t => t.key === p.key)) // check for duplicate key + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).push(p); // append; silently ignore duplicates + }); + } + /** static Tempo properties getter */ + static get properties() { + return secure(getAccessors(Tempo) + .filter(acc => getType(acc) !== 'Symbol')); // omit any Symbol properties + } + /** Tempo initial default settings */ + static get default() { + return secure({ ...Default, scope: 'default', timeZone: TimeZone }); + } + /** + * configuration governing the static 'rules' used when parsing Tempo.DateTime argument + */ + static get parse() { + const parse = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse; + return secure({ + ...parse, // spread primitives like {pivot} + snippet: { ...parse.snippet }, // spread nested objects + layout: { ...parse.layout }, + event: { ...parse.event }, + period: { ...parse.period }, + mdyLocales: [...parse.mdyLocales], + mdyLayouts: [...parse.mdyLayouts], + }); + } + /** iterate over Tempo properties */ + static [(Symbol.iterator)]() { + return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters' + } + // #endregion Static public methods + // #region Instance symbols~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** allow for auto-convert of Tempo to BigInt, Number or String */ + [Symbol.toPrimitive](hint) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.config, getType(this), '.hint: ', hint); + switch (hint) { + case 'string': return this.toString(); // ISO 8601 string + case 'number': return this.epoch.ms; // Unix epoch (milliseconds) + default: return this.nano; // Unix epoch (nanoseconds) + } + } + /** iterate over instance formats */ + [Symbol.iterator]() { + return ownEntries(this.#fmt)[Symbol.iterator](); // instance Iterator over tuple of FormatType[] + } + get [Symbol.toStringTag]() { + return 'Tempo'; // hard-coded to avoid minification mangling + } + // #endregion Instance symbols + // #region Instance properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** constructor tempo */ #tempo; + /** constructor options */ #options = {}; + /** instantiation Temporal Instant */ #now; + /** underlying Temporal ZonedDateTime */ #zdt; + /** temporary anchor used during parsing */ #anchor; + /** prebuilt formats, for convenience */ #fmt = {}; + /** instance term plugins */ #term = Object.create(null); + /** instance values to complement static values */ #local = { + /** instance configuration */ config: {}, + /** instance parse rules (only populated if provided) */ parse: { result: [] } + }; + constructor(tempo, options = {}) { + this.#now = Temporal.Now.instant(); // stash current Instant + [this.#tempo, this.#options] = this.#swap(tempo, options); // swap arguments around, if arg1=Options or Temporal-like + this.#setLocal(this.#options); // parse the local options looking for overrides to Tempo.#global.config + // we now have all the info we need to instantiate a new Tempo + try { + this.#anchor = this.#options.anchor; + this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg + if (['iso8601', 'gregory'].includes(this.#local.config['calendar'])) { + for (const key of this.#local.config.formats.keys()) + Object.assign(this.#fmt, { [key]: this.format(key) }); + } + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) // add the plug-in getters for the pre-defined Terms to the instance + .forEach(({ key, scope, define }) => { + this.#setTerm(this, key, define, true); // add a getter which returns the key-field only + this.#setTerm(this, scope, define, false); // add a getter which returns a range-object + }); + if (isDefined(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending))) { // are we mutating with 'set()' ? + this.#local.parse.result.unshift(...__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending)); // prepend collected parse-matches + __classPrivateFieldSet(Tempo, _classThis, void 0, "f", _Tempo_pending); // and reset mutating-flag + } + secure(this.#fmt); // prevent mutations + secure(this.#term); // secure the initial object with getters + secure(this.#local.config); + secure(this.#local.parse); + } + catch (err) { + console.error('Tempo Constructor Error:', err); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.config, `Cannot create Tempo: ${err.message}\n${err.stack}`); + return {}; // return empty Object + } + } + // This function has be defined within the Tempo class (and not imported from another module) because it references a private-variable + /** this will add a getter on the instance #term private field */ + #setTerm(self, name, define, isKeyOnly) { + if (isDefined(name) && isDefined(define)) { + Object.defineProperty(self.#term, name, { + configurable: false, + enumerable: false, + get: function () { + const value = define.call(self, isKeyOnly); // evaluate the term range-lookup + self.#term = secure(Object.create(self.#term, { + [name]: { + value, + configurable: false, + writable: false, + enumerable: true + } + })); + return secure(value); + } + }); + } + } + // #endregion Constructor + // #region Instance public accessors~~~~~~~~~~~~~~~~~~~~~~ + /** 4-digit year (e.g., 2024) */ get yy() { return this.toDateTime().year; } + /** 4-digit ISO week-numbering year */ get wy() { return this.ww === 1 && this.mm === Tempo.MONTH.Dec ? this.yy + 1 : (this.ww >= 52 && this.mm === Tempo.MONTH.Jan ? this.yy - 1 : this.yy); } + /** Month number: Jan=1, Dec=12 */ get mm() { return this.toDateTime().month; } + /** ISO week number of the year */ get ww() { return this.toDateTime().weekOfYear; } + /** Day of the month (1-31) */ get dd() { return this.toDateTime().day; } + /** Day of the month (alias for `dd`) */ get day() { return this.toDateTime().day; } + /** Hour of the day (0-23) */ get hh() { return this.toDateTime().hour; } + /** Minutes of the hour (0-59) */ get mi() { return this.toDateTime().minute; } + /** Seconds of the minute (0-59) */ get ss() { return this.toDateTime().second; } + /** Milliseconds of the second (0-999) */ get ms() { return this.toDateTime().millisecond; } + /** Microseconds of the millisecond (0-999) */ get us() { return this.toDateTime().microsecond; } + /** Nanoseconds of the microsecond (0-999) */ get ns() { return this.toDateTime().nanosecond; } + /** Fractional seconds (e.g., 0.123456789) */ get ff() { return +(`0.${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`); } + /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz() { return this.toDateTime().timeZoneId; } + /** Unix timestamp (defaults to milliseconds) */ get ts() { return this.epoch[this.#local.config.timeStamp]; } + /** Short month name (e.g., 'Jan') */ get mmm() { return Tempo.MONTH.keyOf(this.#zdt.month); } + /** Full month name (e.g., 'January') */ get mon() { return Tempo.MONTHS.keyOf(this.#zdt.month); } + /** Short weekday name (e.g., 'Mon') */ get www() { return Tempo.WEEKDAY.keyOf(this.#zdt.dayOfWeek); } + /** Full weekday name (e.g., 'Monday') */ get wkd() { return Tempo.WEEKDAYS.keyOf(this.toDateTime().dayOfWeek); } + /** ISO weekday number: Mon=1, Sun=7 */ get dow() { return this.toDateTime().dayOfWeek; } + /** Nanoseconds since Unix epoch (BigInt) */ get nano() { return this.toDateTime().epochNanoseconds; } + /** current Tempo configuration */ + get config() { + return getProxy(omit({ ...this.#local.config }, 'scope', 'value', 'anchor')); + } + /** Instance-specific parse rules (merged with global) */ get parse() { return this.#local.parse; } + /** Object containing results from all term plugins */ get term() { return getProxy(this.#term); } + /** Formatted results for all pre-defined format codes */ get fmt() { return this.#fmt; } + /** units since epoch */ get epoch() { + return secure({ + /** seconds since epoch */ ss: Math.trunc(this.toDateTime().epochMilliseconds / 1_000), + /** milliseconds since epoch */ ms: this.toDateTime().epochMilliseconds, + /** microseconds since epoch */ us: Number(this.toDateTime().epochNanoseconds / BigInt(1_000)), + /** nanoseconds since epoch */ ns: this.toDateTime().epochNanoseconds, + }); + } + // #endregion Instance public accessors + // #region Instance private accessors + /** + * @Immutable class decorators wrap the class but leave internal lexical bindings pointing to the original, undecorated class. + * To ensure new instances returned by instance methods are properly frozen, + * we must instantiate internally from the decorated wrapper (which is bound to `this.constructor`) + * rather than using `new Tempo(..)`. + */ + get #Tempo() { return this.constructor; } + /** time duration until another date-time */ until(optsOrDate, optsOrUntil) { return this.#until(optsOrDate, optsOrUntil); } + /** time elapsed since another date-time */ since(optsOrDate, optsOrUntil) { return this.#since(optsOrDate, optsOrUntil); } + /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt) { return this.#format(fmt); } + /** returns a new `Tempo` with specific duration added. */ add(tempo, options) { return this.#add(tempo, options); } + /** returns a new `Tempo` with specific offsets. */ set(tempo, options) { return this.#set(tempo, options); } + /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config); } + /** returns the underlying Temporal.ZonedDateTime */ toDateTime() { return this.#zdt ?? this.#anchor ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone); } + /** returns a Temporal.PlainDate representation */ toPlainDate() { return this.toDateTime().toPlainDate(); } + /** returns a Temporal.PlainTime representation */ toPlainTime() { return this.toDateTime().toPlainTime(); } + /** returns a Temporal.PlainDateTime representation */ toPlainDateTime() { return this.toDateTime().toPlainDateTime(); } + /** returns the underlying Temporal.Instant */ toInstant() { return this.toDateTime().toInstant(); } + /** the date-time as a standard `Date` object. */ toDate() { return new Date(this.toDateTime().round({ smallestUnit: ELEMENT.ms }).epochMilliseconds); } + /** the ISO8601 string representation of the date-time. */ toString() { return this.toPlainDateTime().toString({ calendarName: 'never' }); } + /** Custom JSON serialization for `JSON.stringify`. */ toJSON() { return omit({ ...this.#local.config, value: this.toString() }, 'scope', 'store'); } + /** `true` if the underlying date-time is valid. */ isValid() { return !isEmpty(this); } + // #endregion Instance public methods + // #region Instance private methods~~~~~~~~~~~~~~~~~~~~~~~ + /** setup local 'config' and 'parse' rules (prototype-linked to global) */ + #setLocal(options) { + // setup local config (prototype-linked to global config) + this.#local.config = Object.create(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config); + Object.assign(this.#local.config, { scope: 'local' }); + // setup local parse rules (prototype-linked to global parse) + this.#local.parse = Object.create(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse); + this.#local.parse.result = []; + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, this.#local, options); // set #local config + } + /** parse DateTime input */ + #parse(tempo, dateTime) { + const today = (dateTime ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone)) + .withTimeZone(this.#local.config.timeZone); + const { type, value } = this.#conform(tempo, today, isDefined(dateTime)); + // evaluate latest timezone / calendar (after #conform which might have updated them) + const { timeZone, calendar } = this.#local.config; + const tz = isString(timeZone) ? timeZone : timeZone.id ?? timeZone.timeZoneId; + const cal = isString(calendar) ? calendar : calendar.id ?? calendar.calendarId; + if (isEmpty(this.#local.parse.result) && isUndefined(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending))) // #conform() didn't find any matches + this.#local.parse.result = [{ type, value }]; + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'parse', `{type: ${type}, value: ${value}}`); // show what we're parsing + switch (type) { + case 'Null': + case 'Void': + case 'Empty': + case 'Undefined': + return today; + case 'String': // String which didn't conform to a Tempo.pattern + try { + const str = value.replace(/Z$/, ''); // requested Z-stripping for adoption + const zdt = Temporal.ZonedDateTime.from(str.includes('[') ? str : `${str}[${tz}]`); + if (this.#local) + this.#local.config.timeZone = zdt.timeZoneId; + return zdt; + } + catch (err) { // else see if Date.parse can parse value + this.#result({ type: 'String', value }, { match: 'Date.parse' }); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, 'Cannot detect DateTime; fallback to Date.parse'); + if (Match.date.test(value)) { + try { + return Temporal.PlainDate.from(value).toZonedDateTime(tz).withCalendar(cal); + } + catch { /* ignore and fallback */ } + } + try { + return Temporal.PlainDateTime.from(value).toZonedDateTime(tz).withCalendar(cal); + } + catch { /* ignore and fallback to Date.parse */ } + const date = new Date(value.toString()); + if (isNaN(date.getTime())) + return __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Cannot parse Date: "${value}"`); + return Temporal.ZonedDateTime // adopt instance timezone + .from(`${date.toISOString().substring(0, 23)}[${tz}]`) + .withCalendar(cal); + } + case 'Temporal.ZonedDateTime': // ZonedDateTime object: convert to instance timezone + return (value.timeZoneId === tz && value.calendarId === cal) + ? value + : value.withTimeZone(tz).withCalendar(cal); + case 'Temporal.PlainDate': + case 'Temporal.PlainDateTime': + return value + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.PlainTime': + return today.withPlainTime(value); + case 'Temporal.PlainYearMonth': // assume current day, else end-of-month + return value + .toPlainDate({ day: Math.min(today.day, value.daysInMonth) }) + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.PlainMonthDay': // assume current year + return value + .toPlainDate({ year: today.year }) + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.Instant': + return value + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'Tempo': + return value + .toDateTime() + .withTimeZone(tz) + .withCalendar(cal); // apply instance timezone to cloned Tempo + case 'Date': + return Temporal.Instant.fromEpochMilliseconds(value.getTime()) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'Number': // Number which didn't conform to a Tempo.pattern + const [seconds = BigInt(0), suffix = BigInt(0)] = value.toString().split('.').map(BigInt); + const nano = BigInt(suffix.toString().substring(0, 9).padEnd(9, '0')); + return Temporal.Instant.fromEpochNanoseconds(seconds * BigInt(1_000_000_000) + nano) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'BigInt': // BigInt is not conformed against a Tempo.pattern + return Temporal.Instant.fromEpochNanoseconds(value) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected Tempo parameter type: ${type}, ${String(value)}`); + return today; + } + } + /** resolve constructor / method arguments */ + #swap(tempo, options = {}) { + return this.#isOptions(tempo) + ? [tempo.value, { ...tempo }] + : [tempo, { ...options }]; + } + /** check if we've been given a Tempo Options object */ + #isOptions(arg) { + if (!isObject(arg) || arg.constructor !== Object) + return false; + const keys = ownKeys(arg); // if it contains any 'mutation' keys, then it's not (just) an options object + if (keys.some(key => MUTATION.has(key))) + return false; + return keys + .some(key => OPTION.has(key)); + } + /** check if we've been given a ZonedDateTimeLike object */ + #isZonedDateTimeLike(tempo) { + if (!isObject(tempo) || isEmpty(tempo)) + return false; + // if it contains any 'options' keys, it's not a ZonedDateTime + const keys = ownKeys(tempo); + if (keys.some(key => OPTION.has(key) && key !== 'value')) + return false; + // we include {value} to allow for Tempo instances + return keys + .filter(isString) + .every((key) => ZONED_DATE_TIME.has(key)); + } + #result(...rest) { + const match = Object.assign({}, ...rest); // collect all object arguments + if (!isEmpty(match.groups)) { + if (isDefined(this.#anchor) && !match.isAnchored) + match.isAnchored = true; + (__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending) ?? this.#local.parse.result).push(match); + } + } + /** evaluate 'string | number' input against known patterns */ + #conform(tempo, dateTime, isAnchored = false) { + const arg = asType(tempo); + const { type, value } = arg; + if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property) + const { timeZone, calendar, value, ...options } = tempo; + let zdt = !isEmpty(options) + ? dateTime.with({ ...options }) + : dateTime; + if (timeZone) + zdt = zdt.withTimeZone(timeZone); // optionally set timeZone + if (calendar) + zdt = zdt.withCalendar(calendar); // optionally set calendar + this.#result({ type: 'Temporal.ZonedDateTimeLike', value: zdt, match: 'Temporal.ZonedDateTimeLike' }); + return Object.assign(arg, { + type: 'Temporal.ZonedDateTime', // override {arg.type} + value: zdt, + }); + } + if (type !== 'String' && type !== 'Number') { + this.#result(arg, { match: type }); + return arg; + } + if (isFunction(value)) { + const res = value.call(this); + return this.#conform(res, dateTime, isAnchored); + } + const trim = trimAll(value); + if (type === 'String') { // if original value is String + if (isEmpty(trim)) { // don't conform empty string + this.#result(arg, { match: 'Empty' }); + return Object.assign(arg, { type: 'Empty' }); + } + if (isIntegerLike(trim)) { // if string representation of BigInt literal + this.#result(arg, { match: 'BigInt' }); + return Object.assign(arg, { type: 'BigInt', value: asInteger(trim) }); + } + } + else { // else it is a Number + if (trim.length <= 7) { // cannot reliably interpret small numbers: might be {ss} or {yymmdd} or {dmmyyyy} + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, 'Cannot safely interpret number with less than 8-digits: use string instead'); + return arg; + } + } + // const isSimpleIsoOrNumeric = typeof value === 'string' && (Match.date.test(value) || /^\d+$/.test(value)); + const map = this.#local.parse.pattern; + for (const [sym, pat] of map) { + const groups = this.#parseMatch(pat, trim); // determine pattern-match groups + if (isEmpty(groups)) + continue; // no match, so skip this iteration + this.#result(arg, { match: sym.description, groups: cleanify(groups) }); // stash the {key} of the pattern that was matched + dateTime = this.#parseZone(groups, dateTime); // resolve timezone early so events can use it + dateTime = this.#parseGroups(groups, dateTime); // mutate the {groups} object (resolves events/periods) + dateTime = this.#parseWeekday(groups, dateTime); // if {weekDay} pattern, calculate a calendar value + dateTime = this.#parseDate(groups, dateTime); // if {calendar}|{event} pattern, translate to date value + dateTime = this.#parseTime(groups, dateTime); // if {clock}|{period} pattern, translate to a time value + /** + * finished analyzing a matched pattern. + * rebuild {arg.value} into a ZonedDateTime + */ + // if no time-components were matched, strip time to midnight baseline + if (!isAnchored && !['hh', 'mi', 'ss', 'ff', 'mer', 'per'].some(key => isDefined(groups[key]))) + dateTime = dateTime.withPlainTime('00:00:00'); + Object.assign(arg, { type: 'Temporal.ZonedDateTime', value: dateTime }); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'groups', groups); // show the resolved date-time elements + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'pattern', sym.description); // show the pattern that was matched + break; // stop checking patterns + } + return arg; + } + /** apply a regex-match against a value, and clean the result */ + #parseMatch(pat, value) { + const groups = value.toString().match(pat)?.groups || {}; + ownEntries(groups) // remove undefined, NaN, null and empty values + .forEach(([key, val]) => isEmpty(val) && delete groups[key]); + return groups; + } + /** resolve {event} | {period} to their date | time values (mutates groups) */ + #parseGroups(groups, dateTime) { + this.#anchor = dateTime; // temporarily anchor the instance so events resolve relative to current state + try { + for (const key of ownKeys(groups)) { + const isEvent = Match.event.test(key); + const isPeriod = Match.period.test(key); + if (!isEvent && !isPeriod) + continue; + const idx = +key.substring(4); + const src = key.startsWith('g') ? (isEvent ? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.event : __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.period) : (isEvent ? this.#local.parse.event : this.#local.parse.period); + const entry = ownEntries(src, true)[idx]; + if (!entry) + continue; + const definition = entry[1]; + const res = isFunction(definition) ? definition.call(this).toString() : definition; + const resGroups = isEvent ? this.#parseEvent(res) : this.#parsePeriod(res); + Object.assign(groups, resGroups); + delete groups[key]; + } + } + finally { + this.#anchor = void 0; // reset anchor + } + // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date) + if (isDefined(groups["mm"]) && !isNumeric(groups["mm"])) { + const mm = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_prefix).call(Tempo, groups["mm"]); // conform month-name + groups["mm"] = Tempo.MONTH.keys().findIndex((el) => el === mm).toString().padStart(2, '0'); + } + // Apply mutated groups to dateTime + if (isDefined(groups.yy) || isDefined(groups.mm) || isDefined(groups.dd)) + dateTime = this.#parseDate(groups, dateTime); + if (isDefined(groups.hh) || isDefined(groups.mi) || isDefined(groups.ss) || isDefined(groups.ff) || isDefined(groups.mer)) + dateTime = this.#parseTime(groups, dateTime); + return dateTime; + } + /** + * We expect similar offset-logic to apply to 'modifiers' when parsing a string DateTime. + * returns {adjust} to make, based on {modifier}, {offset}, and {period} + * - previous period + * + next period + * -3 three periods ago + * < prior to base-date (asIs) + * <= prior to base-date (plus one) + */ + #parseModifier({ mod, adjust, offset, period }) { + adjust = Math.abs(adjust); + switch (mod) { + case void 0: // no adjustment + case '=': + case 'this': // current period + return 0; + case '+': // next period + case 'next': + return adjust; + case '-': // previous period + case 'prev': + case 'last': + return -adjust; + case '<': // period before base-date + case 'ago': + return (period <= offset) + ? -adjust + : -(adjust - 1); + case '<=': // period before or including base-date + return (period < offset) + ? -adjust + : -(adjust - 1); + case '>': // period after base-date + case 'hence': + return (period > offset) + ? adjust + : (adjust - 1); + case '>=': // period after or including base-date + case '+=': + return (period >= offset) + ? adjust + : (adjust - 1); + default: // unexpected modifier + return 0; + } + } + /** + * if named-group 'wkd' detected (with optional 'mod', 'nbr', 'sfx' or time-units), then calc relative weekday offset + * | Example | Result | Note | + * | :--- | :---- | :---- | + * | `Wed` | Wed this week | might be earlier or later or equal to current day | + * | `-Wed` | Wed last week | same as new Tempo('Wed').add({ weeks: -1 }) | + * | `+Wed` | Wed next week | same as new Tempo('Wed').add({ weeks: 1 }) | + * | `-3Wed` | Wed three weeks ago | same as new Tempo('Wed').add({ weeks: -3 }) | + * | `', hh: '10', mer: 'pm'} + * we early-exit if we find anything other than time-units + */ + const time = ['hh', 'mi', 'ss', 'ms', 'us', 'ns', 'ff', 'mer']; + if (!ownKeys(rest) + .every(key => time.includes(key))) // non 'time-unit' keys detected + return dateTime; // this is not a true {weekDay} pattern, so early-exit + if (!isEmpty(mod) && !isEmpty(sfx)) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${sfx}'`); + return dateTime; // cannot provide both 'modifier' and 'suffix' + } + const weekday = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_prefix).call(Tempo, wkd); // conform weekday-name + const adjust = +nbr; // how many weeks to adjust + const offset = Tempo.WEEKDAY.keys() // how far weekday is from today + .findIndex((el) => el === weekday); + const days = offset - dateTime.dayOfWeek // number of days to offset from dateTime + + (this.#parseModifier({ mod: mod ?? sfx, adjust, offset, period: dateTime.dayOfWeek }) * dateTime.daysInWeek); + delete groups["wkd"]; + delete groups["mod"]; + delete groups["nbr"]; + delete groups["sfx"]; + return dateTime + .add({ days }); // set new {day} + } + /** + * match input against date patterns + * @returns adjusted ZonedDateTime with resolved time-components + */ + #parseDate(groups, dateTime) { + const { mod, nbr = '1', afx, unt, yy, mm, dd } = groups; + if (isEmpty(yy) && isEmpty(mm) && isEmpty(dd) && isUndefined(unt)) + return dateTime; // return default + if (!isEmpty(mod) && !isEmpty(afx)) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${afx}'`); + return dateTime; + } + let { year, month, day } = this.#num({ + year: yy ?? dateTime.year, // supplied year, else current year + month: mm ?? dateTime.month, // supplied month, else current month + day: dd ?? dateTime.day, // supplied day, else current day + }); + // handle {unt} relative offset (e.g. '2 days ago') + if (unt) { + const adjust = +nbr; + const direction = (mod === '<' || mod === '-' || afx === 'ago') ? -1 : 1; + const plural = singular(unt) + 's'; + dateTime = dateTime.add({ [plural]: adjust * direction }); + delete groups["unt"]; + delete groups["nbr"]; + delete groups["afx"]; + delete groups["mod"]; + return dateTime; + } + // convert 2-digit year to 4-digits using 'pivot-year' (relative to current century) + if (year.toString().match(Match.twoDigit)) { // if {year} match just-two digits + const pivot = dateTime + .subtract({ years: this.#local.parse["pivot"] }) // pivot cutoff to determine century + .year % 100; // remainder + const century = Math.trunc(dateTime.year / 100); // current century + year += (century - Number(year >= pivot)) * 100; // now a four-digit year + } + // adjust the {year} if a Modifier is present + const adjust = +nbr; // how many years to adjust + const offset = Number(pad(month) + '.' + pad(day)); // the event month.day + const period = Number(pad(dateTime.month) + '.' + pad(dateTime.day + 1)); + year += this.#parseModifier({ mod: mod ?? afx, adjust, offset, period }); + Object.assign(groups, { yy: year, mm: month, dd: day }); + delete groups["mod"]; + delete groups["nbr"]; + delete groups["afx"]; + // all date-components are now set; check for overflow in case past end-of-month + return Temporal.PlainDate.from({ year, month, day }, { overflow: 'constrain' }) + .toZonedDateTime(dateTime.timeZoneId) // adjust to constrained date + .withPlainTime(dateTime.toPlainTime()); // restore the time + } + /** match input against 'tm' pattern (returns adjusted ZonedDateTime) */ + #parseTime(groups = {}, dateTime) { + if (isUndefined(groups["hh"])) // must contain 'time' with at least {hh} + return dateTime; + let { hh = 0, mi = 0, ss = 0, ms = 0, us = 0, ns = 0 } = this.#num(groups); + if (hh >= 24) { + dateTime = dateTime.add({ days: Math.trunc(hh / 24) }); // move the date forward number of days to offset + hh %= 24; // midnight is '00:00' on the next-day + } + if (isDefined(groups["ff"])) { // {ff} is fractional seconds and overrides {ms|us|ns} + const ff = groups["ff"].substring(0, 9).padEnd(9, '0'); + ms = +ff.substring(0, 3); + us = +ff.substring(3, 6); + ns = +ff.substring(6, 9); + } + if (groups["mer"]?.toLowerCase() === 'pm' && hh < 12 && (hh + mi + ss + ms + us + ns) > 0) + hh += 12; // anything after midnight and before midday + if (groups["mer"]?.toLowerCase() === 'am' && hh >= 12) + hh -= 12; // anything after midday + return dateTime // return the computed time-values + .withPlainTime({ hour: hh, minute: mi, second: ss, millisecond: ms, microsecond: us, nanosecond: ns }); + } + /** + * apply a timezone or calendar bracket to the current ZonedDateTime + * normalization is applied to ensure 'Z' is treated as 'UTC' + */ + #parseZone(groups, dateTime) { + const tzd = groups["tzd"]?.replace(Match.zed, 'UTC'); // normalize timezone/offset + const brk = groups["brk"]?.replace(Match.zed, 'UTC'); // handle bracketed timezone + const zone = brk || tzd; + if (zone && zone !== dateTime.timeZoneId && !zone.startsWith('u-ca=')) { + if (this.#local) + this.#local.config.timeZone = zone; // update local config if exists + dateTime = dateTime.toPlainDateTime().toZonedDateTime(zone); // adopt timezone override (stable) + } + const cal = groups["cal"]; + if (cal && cal !== dateTime.calendarId) { + const calendar = cal.startsWith('u-ca=') ? cal.substring(5) : cal; + this.#local.config.calendar = calendar; + dateTime = dateTime.withCalendar(calendar); + } + delete groups["brk"]; + delete groups["cal"]; + delete groups["tzd"]; + return dateTime; + } + /** match an {event} string against a date pattern */ + #parseEvent(evt) { + const groups = {}; + const pats = this.#local.parse.isMonthDay // first find out if we have a US-format timeZone + ? ['mdy', 'dmy', 'ymd'] // if so, try {mdy} before {dmy} + : ['dmy', 'mdy', 'ymd']; // else try {dmy} before {mdy} + for (const pat of pats) { + const reg = this.#getPattern(pat); + if (isDefined(reg)) { + const match = this.#parseMatch(reg, evt); + if (!isEmpty(match)) { + this.#result({ type: 'Event', value: evt, match: pat, groups: cleanify(match) }); + Object.assign(groups, match); + } + } + if (!isEmpty(groups)) + break; // return on the first matched pattern + } + return groups; // overlay the match date-components + } + /** match a {period} string against the time pattern */ + #parsePeriod(per) { + const groups = {}; + const tm = this.#getPattern('tm'); // get the RegExp for the time-pattern + if (isDefined(tm)) { + const match = this.#parseMatch(tm, per); + if (!isEmpty(match)) { + this.#result({ type: 'Period', value: per, match: 'tm', groups: cleanify(match) }); + Object.assign(groups, match); + } + } + return groups; + } + /** lookup the RegExp for a given pattern name */ + #getPattern(pat) { + const reg = this.#local.parse.pattern.get(Tempo.getSymbol(pat)); + if (isUndefined(reg)) + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Cannot find pattern: "${pat}"`); + return reg; + } + /** return a new object, with only numeric values */ + #num = (groups) => { + return ownEntries(groups) + .reduce((acc, [key, val]) => { + if (isNumeric(val)) + acc[key] = asNumber(val); + return acc; + }, {}); + }; + /** mutate the date-time by adding a duration */ + #add = (args, options = {}) => { + var _b; + const tz = options.timeZone ?? this.tz; + let zdt = this.#zdt.withTimeZone(tz); + const overrides = { + timeZone: tz, + calendar: this.#zdt.calendarId + }; + __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, "f", _Tempo_pending) ?? [...this.#local.parse.result], "f", _Tempo_pending); // collected parse-results so-far + if (isDefined(args)) { + if (isObject(args) && args.constructor === Object) { + const mutate = 'add'; + zdt = Object.entries(args ?? {}) // loop through each mutation + .reduce((zdt, [unit, offset]) => { + if (unit === 'timeZone' || unit === 'calendar') + return zdt; + const single = singular(unit); + const plural = single + 's'; + switch (`${mutate}.${single}`) { + case 'add.year': + case 'add.month': + case 'add.week': + case 'add.day': + case 'add.hour': + case 'add.minute': + case 'add.second': + case 'add.millisecond': + case 'add.microsecond': + case 'add.nanosecond': + return zdt + .add({ [plural]: offset }); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`); + return zdt; + } + }, zdt); + } + else { + return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt }); + } + } + return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt }); + }; + /** mutate the date-time by setting specific offsets */ + #set = (args, options = {}) => { + var _b; + const tz = options.timeZone ?? this.tz; + let zdt = this.#zdt.withTimeZone(tz); + const overrides = { + timeZone: tz, + calendar: this.#zdt.calendarId + }; + __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, "f", _Tempo_pending) ?? [...this.#local.parse.result], "f", _Tempo_pending); // collected parse-results so-far + if (isDefined(args)) { + if (isObject(args) && args.constructor === Object) { + if (args.timeZone) + overrides.timeZone = args.timeZone; + if (args.calendar) + overrides.calendar = args.calendar; + zdt = Object.entries(args ?? {}) // loop through each mutation + .reduce((zdt, [key, adjust]) => { + if (key === 'timeZone' || key === 'calendar') + return zdt; + const { mutate, offset, single } = ((key) => { + switch (key) { + case 'start': + case 'mid': + case 'end': + return { mutate: key, offset: 0, single: singular(adjust?.toString() ?? '') }; + default: + return { mutate: 'set', offset: adjust, single: singular(key) }; + } + })(key); // IIFE to analyze arguments + switch (`${mutate}.${single}`) { + case 'set.timeZone': + return zdt.withTimeZone(offset); + case 'set.calendar': + return zdt.withCalendar(offset); + case 'set.period': + case 'set.time': + case 'set.date': + case 'set.event': + case 'set.dow': // set day-of-week by number + case 'set.wkd': // set day-of-week by name + return this.#parse(offset, zdt); + case 'set.year': + case 'set.month': + // case 'set.week': // not defined + case 'set.day': + case 'set.hour': + case 'set.minute': + case 'set.second': + case 'set.millisecond': + case 'set.microsecond': + case 'set.nanosecond': + return zdt + .with({ [single]: offset }); + case 'set.yy': + case 'set.mm': + // case 'set.ww': // not defined + case 'set.dd': + case 'set.hh': + case 'set.mi': + case 'set.ss': + case 'set.ms': + case 'set.us': + case 'set.ns': + const value = Tempo.ELEMENT[single]; + return zdt + .with({ [value]: offset }); + case 'start.year': + return zdt + .with({ month: Tempo.MONTH.Jan, day: 1 }) + .startOfDay(); + case 'start.term': // TODO + return zdt; + case 'start.month': + return zdt + .with({ day: 1 }) + .startOfDay(); + case 'start.week': + return zdt + .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) }) + .startOfDay(); + case 'start.day': + return zdt + .startOfDay(); + case 'start.hour': + case 'start.minute': + case 'start.second': + return zdt + .round({ smallestUnit: offset, roundingMode: 'trunc' }); + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + case 'mid.year': + return zdt + .with({ month: Tempo.MONTH.Jul, day: 1 }) + .startOfDay(); + case 'mid.term': // TODO: relevant? + return zdt; + case 'mid.month': + return zdt + .with({ day: Math.trunc(zdt.daysInMonth / 2) }) + .startOfDay(); + case 'mid.week': + return zdt + .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) }) + .startOfDay(); + case 'mid.day': + return zdt + .round({ smallestUnit: 'day', roundingMode: 'trunc' }) + .add({ hours: 12 }); + case 'mid.hour': + return zdt + .round({ smallestUnit: 'hour', roundingMode: 'trunc' }) + .add({ minutes: 30 }); + case 'mid.minute': + return zdt + .round({ smallestUnit: 'minute', roundingMode: 'trunc' }) + .add({ seconds: 30 }); + case 'mid.second': + return zdt + .round({ smallestUnit: 'second', roundingMode: 'trunc' }) + .add({ milliseconds: 500 }); + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + case 'end.year': + return zdt + .add({ years: 1 }) + .with({ month: Tempo.MONTH.Jan, day: 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.term': // TODO + return zdt + .subtract({ nanoseconds: 1 }); + case 'end.month': + return zdt + .add({ months: 1 }) + .with({ day: 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.week': + return zdt + .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.day': + case 'end.hour': + case 'end.minute': + case 'end.second': + return zdt + .round({ smallestUnit: offset, roundingMode: 'ceil' }) + .subtract({ nanoseconds: 1 }); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`); + return zdt; + } + }, zdt); // start reduce with the shifted zonedDateTime + } + else { + return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt }); + } + } + return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt }); + }; + #format = (fmt) => { + if (isNull(this.#tempo)) + return undefined; // don't format dates + const obj = this.#local.config.formats; + let template = (isString(fmt) && obj.has(fmt)) + ? obj[fmt] + : String(fmt); + // auto-meridiem: if {HH} is present and {mer} is absent, append it after the last time component + if (template.includes('{HH}') && !template.includes('{mer}') && !template.includes('{MER}')) { + const index = Math.max(template.lastIndexOf('{HH}'), template.lastIndexOf('{mi}'), template.lastIndexOf('{ss}')); + if (index !== -1) { + const end = template.indexOf('}', index) + 1; + template = template.slice(0, end) + '{mer}' + template.slice(end); + } + } + const result = template.replace(Match.braces, (_match, token) => { + switch (token) { + case 'wy': return pad(this.wy, 4); + case 'yyww': return pad(this.wy, 4) + pad(this.ww); + case 'yyyy': return pad(this.yy, 4); + case 'yy': return pad(this.yy % 100); + case 'mon': return this.mon; + case 'mmm': return this.mmm; + case 'mm': return pad(this.mm); + case 'dd': return pad(this.dd); + case 'day': return this.day.toString(); + case 'dow': return this.dow.toString(); + case 'wkd': return this.wkd; + case 'www': return this.www; + case 'ww': return pad(this.ww); + case 'hh': return pad(this.hh); + case 'HH': return pad(this.hh > 12 ? this.hh % 12 : this.hh || 12); + case 'mer': return this.hh >= 12 ? 'pm' : 'am'; + case 'MER': return this.hh >= 12 ? 'PM' : 'AM'; + case 'mi': return pad(this.mi); + case 'ss': return pad(this.ss); + case 'ms': return pad(this.ms, 3); + case 'us': return pad(this.us, 3); + case 'ns': return pad(this.ns, 3); + case 'ff': return `${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`; + case 'hhmiss': return `${pad(this.hh)}${pad(this.mi)}${pad(this.ss)}`; + case 'ts': return this.ts.toString(); + case 'nano': return this.nano.toString(); + case 'tz': return this.tz; + default: { + return token.startsWith('term.') + ? stringify(this.term[token.slice(5)]) + : `{${token}}`; // unknown format-code, return as-is + } + } + }); + const isExplicitlyNumeric = ['{yyyy}{ww}', '{yyyy}{mm}', '{yyyy}{mm}{dd}', '{yyww}', '{wy}{ww}', '{wy}'].includes(template); + return (isExplicitlyNumeric ? ifNumeric(result) : result); + }; + #until(arg, until = {}, since = false) { + let value, opts = {}, unit; + switch (true) { + case isString(arg) && Tempo.ELEMENT.includes(singular(arg)): + unit = arg; // e.g. tempo.until('hours') + ({ value, ...opts } = until); + break; + case isString(arg): // assume 'arg' is a dateTime string + value = arg; // e.g. tempo.until('20-May-1957', {unit: 'years'}) + if (isObject(until)) + ({ unit, ...opts } = until); + else + unit = until; // assume the 'until' arg is a 'unit' string + break; + case isObject(arg) && isString(until): // assume 'until' is a Unit + unit = until; // e.g. tempo.until({value:'20-May-1957}, 'years'}) + ({ value, ...opts } = arg); + break; + case isObject(arg) && isObject(until): // assume combination of Tempo.Options and Tempo.Until + ({ value, unit, ...opts } = Object.assign({}, arg, until)); + break; + case isString(until): + unit = until; + value = arg; + break; + case isObject(until): + unit = until.unit; + value = arg; + break; + default: + value = arg; // assume 'arg' is a DateTime + } + const offset = new this.#Tempo(value, opts); // create the offset Tempo + const diffZone = this.#zdt.timeZoneId !== offset.#zdt.timeZoneId; + // Temporal restricts cross-timezone math to absolute units ('hours') to avoid DST ambiguity + const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') }); + if (isDefined(unit)) + unit = `${singular(unit)}s`; // coerce to plural + return (isUndefined(unit) || since) // if no 'unit' provided, or if called via #since() + ? getAccessors(duration) // return an Object with all the duration accessors + .reduce((acc, dur) => Object.assign(acc, { [dur]: duration[dur] }), ifDefined({ iso: duration.toString(), unit })) + : duration.total({ relativeTo: this.#zdt, unit }); // sum-up the duration components + } + /** format the elapsed time between two Tempos (to nanosecond) */ + #since(arg, until = {}) { + const dur = this.#until(arg, until, true); // get a Tempo.Duration object + const date = [dur.years, dur.months, dur.days]; + const time = [dur.hours, dur.minutes, dur.seconds]; + const fraction = [dur.milliseconds, dur.microseconds, dur.nanoseconds] + .map(Math.abs) + .map(nbr => nbr.toString().padStart(3, '0')) + .join(''); + const rtf = new Intl.RelativeTimeFormat(this.#local.config['locale'], { style: 'narrow' }); + switch (dur.unit) { + case 'years': + return rtf.format(date[0], 'years'); + case 'months': + return rtf.format(date[1], 'months'); + case 'weeks': + return rtf.format(date[1], 'weeks'); + case 'days': + return rtf.format(date[2], 'days'); + case 'hours': + return rtf.format(time[0], 'hours'); + case 'minutes': + return rtf.format(time[1], 'minutes'); + case 'seconds': + return rtf.format(time[2], 'seconds'); + case 'milliseconds': + case 'microseconds': + case 'nanoseconds': + return `${fraction}`; + default: + return dur.iso; + } + } + static { + __runInitializers(_classThis, _classExtraInitializers); + } + }; + return Tempo = _classThis; +})(); +// #endregion Namespace +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Tempo.init(); // initialize default global configuration +// shortcut functions to common Tempo properties / methods +/** check valid Tempo */ const isTempo = (tempo) => isType(tempo, 'Tempo'); +/** current timestamp (ts) */ const getStamp = ((tempo, options) => new Tempo(tempo, options).ts); +/** create new Tempo */ const getTempo = ((tempo, options) => new Tempo(tempo, options)); +/** format a Tempo */ const fmtTempo = ((fmt, tempo, options) => new Tempo(tempo, options).format(fmt)); + +/** + * Wrap a Promise's resolve/reject/finally methods for later fulfilment. + * with useful methods for tracking the state of the Promise, chaining fulfilment, etc. + ``` + new Pledge({tag: string, onResolve?: () => void, onReject?: () => void, onSettle?: () => void}) + new Pledge(tag?: string) + ``` + */ +let Pledge = (() => { + var _Pledge_static; + let _classDecorators = [Immutable]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + var Pledge = class { + static { _classThis = this; } + static { __setFunctionName(this, "Pledge"); } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + Pledge = _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + } + #pledge; + #status = {}; + #dbg; + static { + _Pledge_static = { value: {} }; + } + static STATE = secure({ + Pending: Symbol('pending'), + Resolved: Symbol('resolved'), + Rejected: Symbol('rejected') + }); + /** initialize future Pledge instances */ + static init(arg) { + if (isObject(arg)) { + if (isEmpty(arg)) + __classPrivateFieldSet(Pledge, _classThis, {}, "f", _Pledge_static); // reset static values + Object.assign(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }), ifDefined({ onResolve: arg.onResolve, onReject: arg.onReject, onSettle: arg.onSettle, })); + } + else { + Object.assign(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static), ifDefined({ tag: arg, })); + } + if (__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).debug) + console.log('Pledge: ', __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static)); // debug + return Pledge.status; + } + /** reset static defaults */ + static [Symbol.dispose]() { Pledge.init({}); } + static get status() { + return __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static); + } + /** use catch:boolean to determine whether to throw or return */ + #catch(...msg) { + if (this.status.catch) { + this.#dbg.warn(...msg); // catch, but warn {error} + return; + } + this.#dbg.error(...msg); // assume {error} + throw new Error(sprintf('pledge: ', ...msg)); + } + constructor(arg) { + this.#pledge = Promise.withResolvers(); + this.#status = { state: Pledge.STATE.Pending, ...__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static) }; + if (isObject(arg)) { + this.#dbg = new Logify({ debug: arg.debug, catch: arg.catch }); + Object.assign(this.#status, ifDefined({ tag: __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).tag, debug: __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).debug, catch: __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).catch }), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, })); + const onResolve = asArray(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).onResolve).concat(asArray(arg.onResolve)); + const onReject = asArray(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).onReject).concat(asArray(arg.onReject)); + const onSettle = asArray(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).onSettle).concat(asArray(arg.onSettle)); + if (onResolve.length) + this.#pledge.promise.then(val => onResolve.forEach(cb => cb(val))); + if (onReject.length) + this.#pledge.promise.catch(err => onReject.forEach(cb => cb(err))); + if (onSettle.length) + this.#pledge.promise.finally(() => onSettle.forEach(cb => cb())); + if (this.#status.catch) + this.#pledge.promise.catch(err => this.#catch(this.#status, err)); + } + else { + this.#dbg = new Logify(); + Object.assign(this.#status, ifDefined({ tag: arg ?? __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).tag, })); + } + this.#pledge.promise.catch(() => { }); // global catch-all to prevent unhandled rejections + Object.freeze(this); // make this instance immutable + } + get [Symbol.toStringTag]() { + return 'Pledge'; + } + [Symbol.dispose]() { + if (this.isPending) + this.reject(new Error(`Pledge disposed`)); // discard pending Pledge (to notify wait-ers) + } + get status() { + return cleanify(this.#status); + } + get promise() { + return this.#pledge.promise; + } + get state() { + return this.#status.state.description; + } + get isPending() { + return this.#status.state === Pledge.STATE.Pending; + } + get isResolved() { + return this.#status.state === Pledge.STATE.Resolved; + } + get isRejected() { + return this.#status.state === Pledge.STATE.Rejected; + } + get isSettled() { + return this.#status.state !== Pledge.STATE.Pending; + } + toString() { + return JSON.stringify(this.status); + } + resolve(value) { + if (this.isPending) { + this.#status.settled = value; + this.#status.state = Pledge.STATE.Resolved; + this.#pledge.resolve(value); // resolve, then trigger any Pledge.onResolve, then Pledge.onSettle + } + else + this.#dbg.warn(this.#status, `Pledge was already ${this.state}`); + return this.#pledge.promise; + } + reject(error) { + if (this.isPending) { + this.#status.error = error; + this.#status.state = Pledge.STATE.Rejected; + this.#pledge.reject(error); // reject, then trigger any Pledge.onReject, then Pledge.onSettle + } + else + this.#dbg.warn(this.#status, `Pledge was already ${this.state}`); + return this.#pledge.promise; + } + then(fn) { + } + static { + __runInitializers(_classThis, _classExtraInitializers); + } + }; + return Pledge = _classThis; +})(); + +export { $Tempo, Enumify, Pledge, Registry, Tempo, cleanify, clone, cloneify, enumify, tempo_enum as enums, fmtTempo, getStamp, getTempo, isTempo, objectify, stringify }; +//# sourceMappingURL=tempo.bundle.esm.js.map diff --git a/packages/tempo/dist/tempo.bundle.esm.js.map b/packages/tempo/dist/tempo.bundle.esm.js.map new file mode 100644 index 00000000..5f04f000 --- /dev/null +++ b/packages/tempo/dist/tempo.bundle.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tempo.bundle.esm.js","sources":["temporal.polyfill.js","../../../node_modules/tslib/tslib.es6.mjs","../../shared/dist/type.library.js","../../shared/dist/reflection.library.js","../../shared/dist/utility.library.js","../../shared/dist/function.library.js","../../shared/dist/serialize.library.js","../../shared/dist/class.library.js","../../shared/dist/logify.class.js","../../shared/dist/object.library.js","../../shared/dist/coercion.library.js","../../shared/dist/storage.library.js","../../shared/dist/proxy.library.js","../../shared/dist/string.library.js","../../shared/dist/enumerate.library.js","tempo.config/tempo.enum.js","tempo.config/terms/term.utils.js","tempo.config/terms/term.quarter.js","tempo.config/terms/term.season.js","tempo.config/terms/term.zodiac.js","tempo.config/terms/term.timeline.js","tempo.config/terms/term.import.js","tempo.config/tempo.default.js","../../shared/dist/array.library.js","../../shared/dist/prototype.library.js","tempo.class.js","../../shared/dist/pledge.class.js"],"sourcesContent":["/**\n * This file verifies native Temporal API support.\n * Tempo requires an environment with native Temporal support or a user-provided polyfill.\n */\n// @ts-ignore\nif (!globalThis.Temporal) {\n const message = `\n[Tempo] Temporal API not found.\nThis library requires the ECMAScript Temporal API. Please ensure your environment \nsupports it natively (Node.js 20+, modern browsers) or provide your own polyfill.\n\nTo add a polyfill to your project:\n1. Install: npm install @js-temporal/polyfill\n2. Import at your entry point: import '@js-temporal/polyfill';\n`;\n console.error(message);\n throw new Error('Temporal API not found.');\n}\nexport {};\n//# sourceMappingURL=temporal.polyfill.js.map","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","/** the primitive type reported by toStringTag() */\nconst protoType = (obj) => Object.prototype.toString.call(obj).slice(8, -1);\n/**\n * return an object's type as a ProperCase string.\n * if instance, return Class name\n */\nexport const getType = (obj, ...instances) => {\n const type = protoType(obj);\n switch (true) {\n case type === 'Object':\n const name = isArrayLike(obj)\n ? 'ArrayLike' // special case Object: ArrayLike\n : obj.constructor?.name ?? 'Object'; // some Objects do not have a constructor method\n return (instances\n .find(inst => obj instanceof inst.class)?.type // allow for 'real' name of Instance, after minification\n ?? name); // return Object name\n case type === 'Function' && Function.prototype.toString.call(obj).startsWith('class '):\n return 'Class';\n default:\n return type;\n }\n};\n/** return TypeValue object */\nexport const asType = (value, ...instances) => ({ type: getType(value, ...instances), value });\n/** assert value is one of a list of Types */\nexport const isType = (obj, ...types) => types.includes(getType(obj));\n/** Type-Guards: assert \\ is of \\ */\nexport const isPrimitive = (obj) => isType(obj, 'String', 'Number', 'BigInt', 'Boolean', 'Symbol', 'Undefined', 'Void', 'Null', 'Empty');\nexport const isReference = (obj) => !isPrimitive(obj);\nexport const isIterable = (obj) => Symbol.iterator in Object(obj) && !isString(obj);\nexport const isString = (obj) => isType(obj, 'String');\nexport const isNumber = (obj) => isType(obj, 'Number') && isFinite(obj);\nexport const isInteger = (obj) => isType(obj, 'BigInt');\nexport const isIntegerLike = (obj) => isType(obj, 'String') && /^-?[0-9]+n$/.test(obj);\nexport const isDigit = (obj) => isType(obj, 'Number', 'BigInt');\nexport const isBoolean = (obj) => isType(obj, 'Boolean');\nexport const isArray = (obj) => isType(obj, 'Array');\nexport const isArrayLike = (obj) => protoType(obj) === 'Object' && 'length' in obj && Object.keys(obj).every(key => key === 'length' || !isNaN(Number(key)));\nexport const isObject = (obj) => isType(obj, 'Object');\nexport const isDate = (obj) => isType(obj, 'Date');\nexport const isRegExp = (obj) => isType(obj, 'RegExp');\nexport const isRegExpLike = (obj) => isType(obj, 'String') && /^\\/.*\\/$/.test(obj);\nexport const isSymbol = (obj) => isType(obj, 'Symbol');\nexport const isSymbolFor = (obj) => isType(obj, 'Symbol') && Symbol.keyFor(obj) !== undefined;\nexport const isPropertyKey = (obj) => isType(obj, 'String', 'Number', 'Symbol');\nexport const isNull = (obj) => isType(obj, 'Null');\nexport const isNullish = (obj) => isType(obj, 'Null', 'Undefined', 'Void', 'Empty');\nexport const isUndefined = (obj) => isType(obj, 'Undefined', 'Void', 'Empty');\nexport const isDefined = (obj) => !isNullish(obj);\nexport const isClass = (obj) => isType(obj, 'Class');\nexport const isFunction = (obj) => isType(obj, 'Function', 'AsyncFunction');\nexport const isPromise = (obj) => isType(obj, 'Promise');\nexport const isMap = (obj) => isType(obj, 'Map');\nexport const isSet = (obj) => isType(obj, 'Set');\nexport const isError = (err) => isType(err, 'Error');\nexport const isTemporal = (obj) => protoType(obj).startsWith('Temporal.');\n// non-standard Objects\nexport const isTempo = (obj) => isType(obj, 'Tempo');\nexport const isEnum = (obj) => isType(obj, 'Enumify');\nexport const isPledge = (obj) => isType(obj, 'Pledge');\nexport const nullToZero = (obj) => obj ?? 0;\nexport const nullToEmpty = (obj) => obj ?? '';\nexport const nullToValue = (obj, value) => obj ?? value;\n/** object has no values */\nexport const isEmpty = (obj) => false\n || isNullish(obj)\n || (isObject(obj) && (Reflect.ownKeys(obj).length === 0))\n || (isString(obj) && (obj.trim().length === 0))\n || (isNumber(obj) && (isNaN(obj) === true))\n || (isArray(obj) && (obj.length === 0))\n || (isSet(obj) && (obj.size === 0))\n || (isMap(obj) && (obj.size === 0));\nexport function assertCondition(condition, message) {\n if (!condition)\n throw new Error(message);\n}\nexport function assertString(str) { assertCondition(isString(str), `Invalid string: ${str}`); }\n;\nexport function assertNever(val) { throw new Error(`Unexpected object: ${val}`); }\n;\n//# sourceMappingURL=type.library.js.map","import { asType, getType, isEmpty, isFunction, isPrimitive } from '#core/shared/type.library.js';\n/** property marker used to unwrap proxies in ownEntries() */\nexport const $Target = Symbol.for('$Target');\n/** mutate Object | Array by excluding values with specified primitive 'types' */\nexport function exclude(obj, ...types) {\n const exclusions = types\n .map(item => item.toLowerCase()) // cast Primitives as Lowercase to aid in matching\n .distinct();\n if (obj && typeof obj === 'object') { // only works on Objects and Arrays\n const keys = [];\n ownEntries(obj)\n .forEach(([key, value]) => {\n const type = getType(value);\n if (['Object', 'Array'].includes(type)) // recurse into object\n exclude(value, ...exclusions);\n if (isPrimitive(value) && exclusions.includes(type.toLowerCase()))\n keys.push(key);\n });\n if (!isEmpty(keys)) // if any values to be excluded\n omit(obj, ...keys);\n }\n return obj; // return Object reference, even though Object has been mutated\n}\nexport function omit(obj, ...keys) {\n const { type, value } = asType(obj);\n switch (type) {\n case 'Array':\n if (isEmpty(keys)) {\n value.clear(); // clear entire Array\n break;\n }\n keys\n .sort()\n .reverse() // remove from end-to-start to preserve indexes\n .forEach(key => value.splice(Number(key), 1)); // remove Array index\n break;\n case 'Object':\n (isEmpty(keys) ? ownKeys(value) : keys) // if no {keys}, assume all ownKeys\n .forEach(key => Reflect.deleteProperty(value, key));\n }\n return value; // return Object reference, even though Object has been mutated\n}\n/** remove all ownKeys from an Object | Array */\nexport function purge(obj) {\n return omit(obj);\n}\n/** reset Object */\nexport function reset(orig, obj) {\n return Object.assign(purge(orig), { ...obj });\n}\n// These functions are to preserve the typescript 'type' of an object's keys & values\n// and will include both string and symbol keys\n/** array of all enumerable PropertyKeys */\nexport function ownKeys(json) {\n return ownEntries(json).map(([key]) => key);\n}\n/** array of all enumerable object values */\nexport function ownValues(json) {\n return ownEntries(json).map(([_, value]) => value);\n}\n/** tuple of enumerable entries with string | symbol keys */\nexport function ownEntries(json, all = false) {\n if (!json || typeof json !== 'object')\n return [];\n const getOwn = (obj) => {\n const tgt = obj[$Target] ?? obj; // unwrap if it's a proxy\n return Reflect.ownKeys(tgt)\n .filter(key => Object.getOwnPropertyDescriptor(tgt, key)?.enumerable)\n .map(key => [key, tgt[key]]);\n };\n if (!all)\n return getOwn(json);\n // all=true: collect per-level bottom-up, reverse to top-down, dedup via Map\n // Map preserves first-insertion position but allows value update (own key shadows ancestor)\n const levels = [];\n const limit = 50; // prevent infinite loops (increased from 10)\n let depth = 0;\n let proto = json;\n do {\n const t = proto[$Target] ?? proto; // CRITICAL: unwrap before checking marker to avoid trap recursion\n const lvl = getOwn(proto);\n if (lvl.length)\n levels.push(lvl);\n proto = Object.getPrototypeOf(t);\n } while (proto && proto !== Object.prototype && ++depth < limit);\n return [...new Map(levels.reverse().flat()).entries()];\n}\n/** return an Object containing all 'own' and 'inherited' enumerable properties */\nexport function allObject(json) {\n return Object.fromEntries(ownEntries(json, true));\n}\n/** get a string-array of 'getter' names for an object */\nexport const getAccessors = (obj = {}) => {\n return ownAccessors(obj, 'get');\n};\n/** get a string-array of 'setter' names for an object */\nexport const setAccessors = (obj = {}) => {\n return ownAccessors(obj, 'set');\n};\nconst ownAccessors = (obj = {}, type) => {\n const accessors = Object.getOwnPropertyDescriptors(obj.prototype || Object.getPrototypeOf(obj));\n return ownEntries(accessors)\n .filter(([_, descriptor]) => isFunction(descriptor[type]))\n .map(([key, _]) => key);\n};\n/** copy all Own properties (including getters / setters) to a new object */\nexport const copyObject = (target, source) => {\n return Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n};\n//# sourceMappingURL=reflection.library.js.map","import { ownValues } from '#core/shared/reflection.library.js';\nimport { isDefined, isReference } from '#core/shared/type.library.js';\n/** General utility functions */\n/** analyze the Call Stack to determine calling Function's name */\nexport const getCaller = () => {\n const stackTrace = new Error().stack // only tested in latest FF and Chrome\n ?.split('\\n')\n ?.map(itm => itm.trim())\n ?.filter(itm => !itm.startsWith('Error'))\n ?? [];\n const callerName = stackTrace[2].split(' ');\n return (callerName[1] === 'new') ? callerName[2] : callerName[1].split('.')[0];\n};\n/** analyze the Call Stack to determine calling Function's name */\nexport const getScript = (nbr = 1) => {\n const stackTrace = new Error().stack\n ?.match(/([^ \\n\\(@])*([a-z]*:\\/\\/\\/?)*?[a-z0-9\\/\\\\]*\\.js/ig)?.[nbr];\n return decodeURI(stackTrace ?? ''); // decodeURI is needed to handle spaces in file-names\n};\n/**\n * introduce a wait-timer that will Error() on timeOut.\n * best used with Promise.race([xxx(), sleep()]\n * @param msg\t\t\tstring to display on a timeout\n * @param timeOut\thow many milliseconds to sleep (default 2-seconds)\n * @returns\t\t\t\tPromise\\\n */\nexport const sleep = (msg = 'sleep: timed out', timeOut = 2000) => new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), timeOut));\n/** Javascript Runtimes */\nexport const CONTEXT = {\n 'Unknown': 'unknown',\n 'Browser': 'browser',\n 'NodeJS': 'nodejs',\n 'Deno': 'deno',\n 'GoogleAppsScript': 'google-apps-script',\n};\n/** determine JavaScript environment context */\nexport const getContext = () => {\n const global = globalThis;\n if (isDefined(global.SpreadsheetApp))\n return { global, type: CONTEXT.GoogleAppsScript };\n if (isDefined(global.window?.document))\n return { global, type: CONTEXT.Browser };\n if (isDefined(global.process?.versions?.node))\n return { global, type: CONTEXT.NodeJS };\n return { global, type: CONTEXT.Unknown };\n};\n// useful for those times when a full Enumify object is not needed, but still lock the Object from mutations\n/** deep-freeze an Array | Object to make it immutable */\nexport function secure(obj) {\n if (isReference(obj)) // skip primitive values\n ownValues(obj) // retrieve the properties on obj\n .forEach(val => Object.isFrozen(val) || secure(val)); // secure each value, if not already Frozen\n return Object.freeze(obj); // freeze the object itself\n}\n//# sourceMappingURL=utility.library.js.map","import { secure } from '#core/shared/utility.library.js';\nimport { isUndefined } from '#core/shared/type.library.js';\n/** curry a Function to allow partial calls */\nexport function curry(fn) {\n return function curried(...args) {\n return (args.length >= fn.length)\n ? fn(...args)\n : (...nextArgs) => curried(...args, ...nextArgs);\n };\n}\n/** generic function to memoize repeated function calls */\nexport function memoizeFunction(fn) {\n const cache = new Map(); // using a Map for better key handling than plain objects\n return function (...args) {\n const key = JSON.stringify(args); // create a unique key from arguments\n console.log('memoize: ', key);\n if (!cache.has(key)) {\n // @ts-ignore\n const result = fn.apply(this, args); // call the original function with the correct context\n console.log('set: ', result);\n cache.set(key, Object.freeze(result)); // stash the result for subsequent calls\n }\n else\n console.log('get: ', cache.get(key));\n return cache.get(key);\n };\n}\nconst wm = new WeakMap();\n/** manually clear the memoization cache for an object */\nexport function clearCache(obj) {\n wm.delete(obj);\n}\n/** define a Descriptor for an Object's memoized-method */\nexport function memoizeMethod(name, fn) {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n value: function (...args) {\n const key = `${String(name)},${JSON.stringify(args)}`;\n let cache = wm.get(this);\n if (!cache) { // add a new object into the WeakMap\n cache = Object.create(null);\n wm.set(this, cache);\n }\n if (isUndefined(cache[key])) { // first time for this method\n cache[key] = fn.apply(this, args); // evaluate the method\n secure(cache[key]); // freeze the returned value\n }\n return cache[key];\n }\n };\n}\n//# sourceMappingURL=function.library.js.map","import { curry } from '#core/shared/function.library.js';\nimport { ownKeys, ownValues, ownEntries } from '#core/shared/reflection.library.js';\nimport { isType, asType, isEmpty, isDefined, isUndefined, isNullish, isString, isObject, isArray, isFunction, isSymbolFor, isSymbol } from '#core/shared/type.library.js';\n/** registry of registered classes */\n// DO NOT EDIT THIS VALUE: used by decorator.library.ts\nexport const Registry = new Map();\n// be aware that 'structuredClone' preserves \\ values... \n// and JSON.stringify() does not\n/** make a deep-copy, using standard browser or JSON functions */\nexport function clone(obj, opts) {\n try {\n return globalThis.structuredClone(obj, opts);\n }\n catch {\n return cleanify(obj); // fallback to JSON functions\n }\n}\n/** return a copy. remove unsupported values (e.g. \\, function) */\nexport function cleanify(obj) {\n try {\n return JSON.parse(JSON.stringify(obj)); // run any toString() methods\n }\n catch (error) {\n console.warn('Could not clean object: ', obj);\n return { ...obj };\n }\n}\n/** deep-copy an Object, and optionally replace \\ fields with a Sentinel function call\t*/\nexport function cloneify(obj, sentinel) {\n try {\n return objectify(stringify(obj), sentinel);\n }\n catch (error) {\n console.warn('Could not cloneify object: ', obj);\n console.warn('stack: ', error.stack);\n return obj;\n }\n}\nfunction replacer(key, obj) { return isEmpty(key) ? obj : stringize(obj); }\nfunction reviver(_key, val) { return decode(val); }\n// safe-characters [sp \" ; < > [ ] ^ { | }]\nconst safeList = ['20', '22', '3B', '3C', '3E', '5B', '5D', '5E', '7B', '7C', '7D'];\n/** encode control characters, then replace a safe-subset back to text-string */\nfunction encode(val) {\n let enc = encodeURI(val);\n if (enc.includes('%')) { // if an encoded URI might be in string\n safeList.forEach(code => {\n const uri = '%' + code;\n const reg = new RegExp(uri, 'g');\n enc = enc.replace(reg, decodeURI(uri));\n });\n }\n return enc;\n}\n/** decode control characters */\nfunction decode(val) {\n if (isString(val)) {\n try {\n return decodeURI(val); // might fail if badly encoded '%'\n }\n catch (error) {\n // console.warn(`decodeURI: ${(error as Error).message} -> ${val}`);\n }\n }\n return val; // return original value\n}\n/** check type can be stringify'd */\nfunction isStringable(val) {\n return !isType(val, 'Function', 'AsyncFunction', 'WeakMap', 'WeakSet', 'WeakRef');\n}\n/** string representation of a single key:value Object */\nfunction oneKey(type, value) {\n return `{\"$${type}\":${value}}`;\n}\n/** Symbols in an Object-key will need special treatment */\nfunction fromSymbol(key) {\n return stringize(isSymbol(key) // @@(name) for global, @(name) for local symbols\n ? `${isSymbolFor(key) ? '@' : ''}@(${key.description ?? ''})`\n : key);\n}\nconst symKey = /^@(@)?\\(([^\\)]*)\\)$/; // pattern to match a stringify'd Symbol\n/** reconstruct a Symbol from a string-representation of a key */\nfunction toSymbol(value) {\n const [pat, keyFor, desc] = value.toString().match(symKey) || [null, undefined, undefined];\n switch (true) {\n case isSymbol(value): // already a Symbol\n case isNullish(pat): // incorrectly encoded Symbol\n case isDefined(keyFor) && isUndefined(desc): // incorrectly encoded global Symbol\n return value;\n case isDefined(keyFor): // global Symbol\n return Symbol.for(desc);\n case isUndefined(keyFor): // local Symbol\n default:\n return Symbol(desc);\n }\n}\n/**\n * For items which are not currently serializable via standard JSON.stringify (Undefined, BigInt, Set, Map, Symbol, etc.)\n * this creates a stringified, single key:value Object to represent the value; for example '{ \"$BigInt\": 123 }'\n *\n * Drawbacks:\n * no support Function / WeakMap / WeakSet / WeakRef\n * limited support for user-defined Classes (must be specifically registered with @Serialize() decorator)\n */\n/**\n * serialize Objects for string-safe stashing in WebStorage, Cache, etc\n * uses JSON.stringify where available, else returns stringified single key:value Object '{[$type]: value}'\n */\nexport function stringify(obj) {\n return stringize(obj, false);\n}\n/**\n * internal function to process stringify-requests (and hide second parameter)\n * where first argument is the object to stringify, and\n * the second argument is a boolean to indicate if function is being called recursively\n */\nfunction stringize(obj, recurse = true) {\n const arg = asType(obj);\n const one = curry(oneKey)(arg.type); // curry the oneKey() function\n switch (arg.type) {\n case 'String':\n if (!recurse) { // if a top-level string (e.g. 'true' or '1234')\n recurse = arg.value === 'true' // ensure true|false|null|1234 are quoted by JSON.stringify\n || arg.value === 'false' // so they will be correctly identified during objectify()\n || arg.value === 'null'\n || parseFloat(arg.value).toString() === arg.value;\n }\n return recurse\n ? JSON.stringify(encode(arg.value)) // encode string for safe-storage\n : encode(arg.value); // dont JSON.stringify a top-level string\n case 'Boolean':\n case 'Null':\n case 'Number':\n return JSON.stringify(arg.value); // JSON.stringify will correctly handle these\n case 'Void':\n case 'Undefined':\n return one(JSON.stringify('void')); // preserve 'undefined' values\t\t\n case 'BigInt':\n return one(arg.value.toString()); // even though BigInt has a toString method, it is not supported in JSON.stringify\n case 'Object':\n const obj = ownEntries(arg.value)\n .filter(([, val]) => isStringable(val))\n .map(([key, val]) => `${fromSymbol(key)}: ${stringize(val)}`)\n .join(',');\n return `{${obj}}`;\n case 'Array':\n const arr = arg.value\n .filter(val => isStringable(val))\n .map(val => stringize(val))\n .join(',');\n return `[${arr}]`;\n case 'Map':\n const map = Array.from(arg.value.entries())\n .filter(([, val]) => isStringable(val))\n .map(([key, val]) => `[${stringize(key)}, ${stringize(val)}]`)\n .join(',');\n return one(`[${map}]`);\n case 'Set':\n const set = Array.from(arg.value.values())\n .filter(val => isStringable(val))\n .map(val => stringize(val))\n .join(',');\n return one(`[${set}]`);\n case 'Symbol':\n return one(fromSymbol(arg.value));\n case 'RegExp':\n return one(stringize({ source: arg.value.source, flags: arg.value.flags }));\n case 'Class':\n default:\n const value = arg.value;\n switch (true) {\n case !isStringable(value): // Object is not stringify-able\n return undefined;\n case isFunction(value.toJSON): // Object has its own toJSON method\n return one(stringize(value.toJSON()));\n case isFunction(value.toString): // Object has its own toString method\n const str = value.toString();\n return one(str.includes('\"') // TODO: improve detection of JSON vs non-JSON strings\n ? str\n : JSON.stringify(str));\n case isFunction(value.valueOf): // Object has its own valueOf method\t\t\n return one(JSON.stringify(value.valueOf()));\n default: // else standard stringify\n return one(JSON.stringify(value, replacer));\n }\n }\n}\n/** rebuild an Object from its stringified representation */\nexport function objectify(str, sentinel) {\n if (!isString(str))\n return str; // skip parsing\n let parse;\n try {\n parse = JSON.parse(str, reviver); // catch if cannot parse\n }\n catch (error) {\n if (str.startsWith('\"') && str.endsWith('\"')) {\n console.warn(`objectify.parse: -> ${str}, ${error.message}`);\n return str; // bail-out\n }\n else\n return objectify(`\"${str}\"`, sentinel); // have another try, quoted\n }\n switch (true) {\n case str.startsWith('{') && str.endsWith('}'): // looks like Object\n case str.startsWith('[') && str.endsWith(']'): // looks like Array\n return traverse(parse, sentinel); // recurse into object\n default:\n return parse;\n }\n}\n/** recurse into Object / Array, looking for special single key:value Objects */\nfunction traverse(obj, sentinel) {\n if (isObject(obj)) {\n return typeify(ownEntries(obj)\n .reduce((acc, [key, val]) => Object.assign(acc, { [toSymbol(key)]: typeify(traverse(val, sentinel)) }), {}), sentinel);\n }\n if (isArray(obj)) {\n return ownValues(obj)\n .map(val => typeify(traverse(val, sentinel)));\n }\n return obj;\n}\n/** rebuild an Object from its single key:value representation */\nfunction typeify(json, sentinel) {\n if (!isObject(json) || ownKeys(json).length !== 1)\n return json; // only JSON Objects, with a single key:value pair\n const [$type, value] = ownEntries(json)[0];\n if (!String($type).startsWith('$'))\n return json; // not a serialized single key:value Object\n const type = $type.substring(1); // remove '$' prefix\n switch (type) {\n case 'String':\n case 'Boolean':\n case 'Object':\n case 'Array':\n return value; // these types are already handled by traverse()\n case 'Number':\n return Number(value);\n case 'BigInt':\n return BigInt(value);\n case 'Null':\n return null;\n case 'Undefined':\n case 'Empty':\n case 'Void':\n return sentinel?.(); // run Sentinel function to handle undefined values\n case 'Date':\n return new Date(value);\n case 'RegExp':\n return new RegExp(value.source, value.flags);\n case 'Symbol':\n return toSymbol(value);\n case 'Map':\n return new Map(value);\n case 'Set':\n return new Set(value);\n default:\n const cls = Registry.get($type); // lookup registered Class\n if (!cls) {\n console.warn(`objectify: dont know how to deserialize '${type}'`);\n return json; // return original JSON object\n }\n return Reflect.construct(cls, [value]); // create new Class instance\n }\n}\n//# sourceMappingURL=serialize.library.js.map","import { ownEntries } from '#core/shared/reflection.library.js';\nimport { Registry } from '#core/shared/serialize.library.js';\n/**\n * Some interesting Class Decorators\n */\n/** decorator to freeze a Class to prevent modification */\nexport function Immutable(value, { kind, name, addInitializer }) {\n name = String(name);\n switch (kind) {\n case 'class':\n const wrapper = {\n [name]: class extends value {\n constructor(...args) {\n super(...args);\n Object.freeze(this); // freeze the instance\n }\n }\n }[name];\n addInitializer(() => {\n const protect = (obj) => {\n ownEntries(Object.getOwnPropertyDescriptors(obj))\n .filter(([name]) => name !== 'constructor') // dont touch the constructor\n .forEach(([name, { configurable, writable }]) => {\n if (configurable) {\n const update = { configurable: false };\n if (writable)\n update.writable = false; // only data descriptors have 'writable'\n Object.defineProperty(obj, name, update);\n }\n });\n };\n protect(value); // protect original static members\n protect(value.prototype); // protect original prototype members\n protect(wrapper); // protect wrapper static members\n protect(wrapper.prototype); // protect wrapper prototype members\n });\n return wrapper;\n default:\n throw new Error(`@Immutable decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n/** register a Class for serialization */\nexport function Serializable(value, { kind, name, addInitializer }) {\n name = String(name); // cast as String\n switch (kind) {\n case 'class':\n addInitializer(() => Registry.set(`$${name}`, value)); // register the class for serialization, via its toString() method\n return value;\n default:\n throw new Error(`@Serializable decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n/** make a Class not instantiable */\nexport function Static(value, { kind, name }) {\n name = String(name);\n switch (kind) {\n case 'class':\n const wrapper = {\n [name]: class extends value {\n constructor(...args) {\n super(...args);\n throw new TypeError(`${name} is not a constructor`);\n }\n }\n }[name];\n return wrapper;\n default:\n throw new Error(`@Static decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n//# sourceMappingURL=class.library.js.map","import { __esDecorate, __runInitializers } from \"tslib\";\nimport { Immutable } from '#core/shared/class.library.js';\nimport { asType, isObject } from '#core/shared/type.library.js';\nconst Method = {\n Log: 'log',\n Info: 'info',\n Warn: 'warn',\n Debug: 'debug',\n Error: 'error',\n};\n/**\n * provide standard logging methods to the console for a class\n */\nlet Logify = (() => {\n let _classDecorators = [Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Logify = class {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Logify = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n #name;\n #opts = {};\n #log(method, ...msg) {\n if (this.#opts.debug)\n console[method](this.#name, ...msg);\n }\n /**\n * if {catch:true} then show a warning on the console and return\n * otherwise show an error on the console and re-throw the error\n */\n catch(...msg) {\n if (this.#opts.catch) {\n this.warn(...msg); // show a warning on the console\n return; // safe-return\n }\n this.error(...msg); // this goes to the console\n throw new Error(`${this.#name}${msg.map(m => isObject(m) ? JSON.stringify(m) : String(m)).join(' ')}`); // catch will be loud or silent, based on #catch config\n }\n /** console.log */ log = (...msg) => this.#log(Method.Log, ...msg);\n /** console.info */ info = (...msg) => this.#log(Method.Info, ...msg);\n /** console.warn */ warn = (...msg) => this.#log(Method.Warn, ...msg);\n /** console.debug */ debug = (...msg) => this.#log(Method.Debug, ...msg);\n /** console.error */ error = (...msg) => this.#log(Method.Error, ...msg);\n constructor(self, opts = {}) {\n const arg = asType(self);\n switch (arg.type) {\n case 'String':\n this.#name = arg.value;\n break;\n // @ts-ignore\n case 'Object':\n Object.assign(opts, arg.value);\n default:\n this.#name = (self ?? this).constructor.name.concat(': ') ?? '';\n }\n this.#opts.debug = opts.debug ?? false; // default debug to 'false'\n this.#opts.catch = opts.catch ?? false; // default catch to 'false'\t\t\t\t\t\t\t\t\n }\n };\n return Logify = _classThis;\n})();\nexport { Logify };\n//# sourceMappingURL=logify.class.js.map","import { ownKeys, ownEntries } from '#core/shared/reflection.library.js';\nimport { isObject, isArray, isReference, isFunction, isDefined, isEmpty, isNullish } from '#core/shared/type.library.js';\n/** Get nested value */\nexport function extract(obj, path, dflt) {\n if (isEmpty(path))\n return obj; // finished searching\n if (!isObject(obj) && !isArray(obj))\n return obj;\n return path\n .toString()\n .replace(/\\[([^\\[\\]]*)\\]/g, '.$1.') // convert [indexes] to properties\n .split('.')\n .filter(field => !isEmpty(field)) // remove empty fields\n .reduce((acc, field) => acc?.[field] ?? null, obj) ?? dflt;\n}\n/** remove quotes around property names */\nexport const unQuoteObj = (obj) => {\n return JSON.stringify(obj)\n ?.replace(/\"([^\"]+)\":/g, '$1: ')\n ?.replace(/,/g, ', ');\n};\n/** copy enumerable properties to a new Object */\nexport const asObject = (obj) => {\n if (isNullish(obj) || !isObject(obj))\n return obj;\n const temp = isArray(obj) ? [] : {};\n ownKeys(obj)\n .forEach(key => temp[key] = asObject(obj[key]));\n return temp;\n};\n/** deep-compare object values for equality */\nexport const isEqual = (obj1 = {}, obj2 = {}) => {\n const keys = new Set(); // union of unique keys from both Objects\n const keys1 = isFunction(obj1.keys) ? Array.from(obj1.keys()) : ownKeys(obj1);\n const keys2 = isFunction(obj2.keys) ? Array.from(obj2.keys()) : ownKeys(obj2);\n keys1.forEach(key => keys.add(key));\n keys2.forEach(key => keys.add(key));\n return [...keys] // cast as Array\n .every(key => {\n const val1 = obj1[key];\n const val2 = obj2[key];\n return isReference(val1) && isReference(val2)\n ? isEqual(val1, val2) // recurse into object\n : val1 === val2;\n });\n};\n/** find all methods on an Object */\nexport const getMethods = (obj, all = false) => {\n const properties = new Set();\n let currentObj = obj;\n do {\n Object\n .getOwnPropertyNames(currentObj)\n .map(key => properties.add(key));\n } while (all && (currentObj = Object.getPrototypeOf(currentObj)));\n return [...properties.keys()]\n .filter(key => isFunction(obj[key]));\n};\n/** extract only defined values from Object */\nexport function ifDefined(obj) {\n return ownEntries(obj)\n .reduce((acc, [key, val]) => {\n if (isDefined(val))\n acc[key] = val;\n return acc;\n }, {});\n}\n/** extract a subset of keys from an object */\nexport const pick = (obj, ...keys) => {\n const ownKeys = Object.getOwnPropertyNames(obj);\n return keys.reduce((acc, key) => {\n if (ownKeys.includes(key))\n acc[key] = obj[key];\n return acc;\n }, {});\n};\n/** extract a named key from an array of objects */\nexport const pluck = (objs, key) => objs.map(obj => obj[key]);\n/** extend an object with the properties of another */\nexport const extend = (obj, ...objs) => Object.assign(obj, ...objs);\nexport const countProperties = (obj = {}) => ownKeys(obj).length;\nexport function looseIndex(arg) {\n if (isDefined(arg))\n return isFunction(arg) ? arg() : arg;\n return (obj) => isFunction(obj) ? obj() : obj;\n}\n/** loose object with symbols values */\nlooseIndex.stringSymbol = looseIndex();\n/** loose object with symbol keys and RegExp values */\nlooseIndex.symbolRegExp = looseIndex();\n/** loose object with symbol keys and string values */\nlooseIndex.symbolString = looseIndex();\n/** loose object with string keys and string values */\nlooseIndex.stringString = looseIndex();\n//# sourceMappingURL=object.library.js.map","import { clone, stringify } from '#core/shared/serialize.library.js';\nimport { isIntegerLike, isArrayLike, isDefined, isInteger, isIterable, isNullish, isString, isUndefined, asType, isNumber } from '#core/shared/type.library.js';\nexport function asArray(arr = [], fill) {\n switch (true) {\n case isArrayLike(arr): // allow for {length:nn} objects\n case isIterable(arr) && !isString(arr): // dont iterate Strings\n return Array.from(arr, val => {\n return isUndefined(fill) || isDefined(val)\n ? val // if no {fill}, then use {val}\n : clone(fill); // clone {fill} to create new Objects\n });\n default:\n return Array.of(arr);\n }\n}\n/** stringify if not nullish */\nexport function asString(str) {\n return isNullish(str)\n ? ''\n : isInteger(str)\n ? str.toString() + 'n'\n : stringify(str);\n}\n/** convert String | Number | BigInt to Number */\nexport function asNumber(str) {\n return parseFloat(str?.toString() ?? 'NaN');\n}\n/** convert String | Number to BigInt */\nexport function asInteger(str) {\n const arg = asType(str);\n switch (arg.type) {\n case 'BigInt':\n return arg.value; // already a BigInt\n case 'Number':\n return BigInt(Math.trunc(arg.value)); // cast as BigInt\n case 'String':\n return (isIntegerLike(arg.value)) // String representation of a BigInt\n ? BigInt(arg.value.slice(0, -1)) // get rid of trailing 'n'\n : BigInt(arg.value);\n default:\n return str;\n }\n}\n/** test if can convert String to Numeric */\nexport function isNumeric(str) {\n const arg = asType(str);\n switch (arg.type) {\n case 'Number':\n case 'BigInt':\n return true;\n case 'String':\n return isIntegerLike(arg.value)\n ? true // is Number | BigInt\n : !isNaN(asNumber(str)) && isFinite(str); // test if Number\n default:\n return false;\n }\n}\n/** return as Number if possible, else original String */\nexport const ifNumeric = (str, stripZero = false) => {\n switch (true) {\n case isInteger(str): // BigInt → Number\n return Number(str);\n case isNumber(str): // Number → as-is\n return str;\n case isNumeric(str) && (!str?.toString().startsWith('0') || stripZero):\n return asNumber(str); // numeric String → Number\n default:\n return str; // non-numeric String → as-is\n }\n};\n//# sourceMappingURL=coercion.library.js.map","import { objectify, stringify } from '#core/shared/serialize.library.js';\nimport { CONTEXT, getContext } from '#core/shared/utility.library.js';\nimport { isDefined, isUndefined, isString } from '#core/shared/type.library.js';\nconst context = getContext();\nlet storage = context.type === CONTEXT.Browser\n ? context.global?.localStorage //as globalThis.Storage\t\t// default to localStorage in a browser\n : undefined;\n/** select local | session storage */\nexport function selStorage(store = 'local') {\n const name = (store + 'Storage');\n return storage = globalThis[name]; // return whichever was selected.\n}\nexport function getStorage(key, dflt) {\n let store;\n if (isUndefined(key))\n return dflt ?? {};\n switch (context.type) {\n case CONTEXT.Browser:\n store = storage.getItem(key);\n break;\n case CONTEXT.NodeJS:\n store = context.global.process.env[key];\n break;\n case CONTEXT.GoogleAppsScript:\n store = context.global.PropertiesService?.getUserProperties().getProperty(key);\n break;\n default:\n throw new Error(`Cannot determine Javascript context: ${context.type}`);\n }\n return isString(store)\n ? objectify(store) // rebuild object from its stringified representation\n : dflt;\n}\n/** set / delete storage */\nexport function setStorage(key, val) {\n const stash = isDefined(val) ? stringify(val) : undefined;\n const set = isDefined(stash);\n switch (context.type) {\n case CONTEXT.Browser:\n set\n ? storage.setItem(key, stash)\n : storage.removeItem(key);\n break;\n case CONTEXT.NodeJS:\n set\n ? (context.global.process.env[key] = stash)\n : (delete context.global.process.env[key]);\n break;\n case CONTEXT.GoogleAppsScript:\n set\n ? context.global.PropertiesService?.getUserProperties().setProperty(key, stash)\n : context.global.PropertiesService?.getUserProperties().deleteProperty(key);\n break;\n default:\n throw new Error(`Cannot determine Javascript context: ${context.type}`);\n }\n}\n//# sourceMappingURL=storage.library.js.map","import { $Target, allObject } from '#core/shared/reflection.library.js';\nimport { secure } from '#core/shared/utility.library.js';\nimport { isFunction } from '#core/shared/type.library.js';\n/** Node.js custom inspection symbol */\nconst $Inspect = Symbol.for('nodejs.util.inspect.custom');\n/** Stealth Proxy pattern to allow for iteration and logging over a Frozen object */\nexport function getProxy(target) {\n secure(target);\n const tgt = target[$Target] ?? target;\n let cachedJSON;\n return new Proxy(target, {\n isExtensible: (t) => Reflect.isExtensible(t),\n preventExtensions: (t) => Reflect.preventExtensions(t),\n getOwnPropertyDescriptor: (_, key) => Reflect.getOwnPropertyDescriptor(tgt, key),\n getPrototypeOf: () => Reflect.getPrototypeOf(tgt),\n deleteProperty: (_, key) => Reflect.deleteProperty(tgt, key),\n ownKeys: () => Reflect.ownKeys(tgt),\n has: (_, key) => Reflect.has(tgt, key),\n set: (_, key, val) => Reflect.set(tgt, key, val),\n get: (_, key, receiver) => {\n if (key === $Target)\n return tgt; // found the 'stop' marker\n if (key === $Inspect || key === 'toJSON') { // two special properties require virtual closures\n const own = Object.getOwnPropertyDescriptor(tgt, key);\n if (own && isFunction(own.value)) // if object already has its own toJSON, return\n return own.value;\n if (!cachedJSON) { // otherwise, create a virtual closure\n const result = allObject(receiver); // resolve full-object representation\n cachedJSON = () => result; // memoize for subsequent calls\n }\n return cachedJSON; // return the memoized closure\n }\n const val = Reflect.get(tgt, key, receiver);\n return (typeof val === 'function') // if the value is a function\n ? val.bind(tgt) // bind it to the target\n : val; // else return the value\n },\n });\n}\n//# sourceMappingURL=proxy.library.js.map","import { asNumber, asString, isNumeric } from '#core/shared/coercion.library.js';\nimport { stringify } from '#core/shared/serialize.library.js';\nimport { isString, isObject, assertCondition, assertString, nullToValue } from '#core/shared/type.library.js';\n// General functions\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// This section needs to be Function declarations so that they are hoisted\n// (because they are referenced in prototype.library)\n/**\n * clean a string to remove some standard control-characters (tab, line-feed, carriage-return) and trim redundant spaces.\n * allow for optional RegExp to specify additional match\n */\nexport function trimAll(str, pat) {\n return str\n .toString() // coerce to String\n .replace(pat, '') // remove regexp, if supplied\n .replace(/\\t/g, ' ') // replace with \n .replace(/(\\r\\n|\\n|\\r)/g, ' ') // replace & \n .replace(/\\s{2,}/g, ' ') // trim multiple \n .trim(); // leading/trailing \n}\n/** every word has its first letter capitalized */\nexport function toProperCase(...str) {\n return str\n .flat() // in case {str} was already an array\n .map(text => text.replace(/\\w\\S*/g, word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()))\n .join(' ');\n}\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst PAT = /[A-Z\\xC0-\\xD6\\xD8-\\xDE]?[a-z\\xDF-\\xF6\\xF8-\\xFF]+|[A-Z\\xC0-\\xD6\\xD8-\\xDE]+(?![a-z\\xDF-\\xF6\\xF8-\\xFF])|\\d+/g;\nexport const toCamelCase = (sentence) => {\n let [word, ...rest] = sentence.match(PAT) ?? [''];\n if (isNumeric(word)) {\n word = rest[0];\n rest.splice(0, 1);\n }\n return (sentence.startsWith('_') ? '_' : '') + word.toLocaleLowerCase() + toProperCase(...rest).replace(/ /g, '');\n};\nconst HEX = 16;\nexport const randomString = (len = 36) => {\n let str = '';\n do // generate random strings\n str += Math.floor(Math.random() * 10 ** 16).toString(HEX).substring(2, 15);\n while (str.length < len);\n return str.substring(0, len);\n};\nexport function sprintf(fmt, ...msg) {\n const regexp = /\\$\\{(\\d)\\}/g; // pattern to find \"${digit}\" parameter markers\n let sfmt = asString(fmt); // avoid mutate fmt\n if (!isString(fmt)) { // might be an Object\n msg.unshift(JSON.stringify(fmt)); // push to start of msg[]\n sfmt = ''; // reset the string-format\n }\n let cnt = 0; // if the format does not contain a corresponding '${digit}' then re-construct the parameters\n sfmt = sfmt.replace(/%[sj]/g, _ => `\\${${cnt++}}`); // flip all the %s or %j to a ${digit} parameter\n const params = Array.from(sfmt.matchAll(regexp))\n .map(match => Number(match[1])); // which parameters are in the fmt\n msg.forEach((_, idx) => {\n if (!params.includes(idx)) // if more args than params\n sfmt += `${sfmt.length === 0 ? '' : sfmt.endsWith(':') ? ' ' : ', '}\\${${idx}}`; // append a dummy params to fmt\n });\n // 2024-02-21 some Objects do not have a .toString method\n return sfmt.replace(regexp, (_, idx) => msg[idx]?.toString?.() || stringify(msg[idx]));\n}\n/** apply a plural suffix, if greater than '1' */\nexport const plural = (val, word, plural = word + 's') => {\n const _plural = (num, word, plural = word + 's') => [1, -1].includes(Number(num)) ? word : plural;\n return isObject(val)\n ? (num, word) => _plural(num, word, val[word])\n : _plural(val, word, plural);\n};\n/** strip a plural suffix, if endsWith 's' */\nexport const singular = (val) => val.endsWith('s') ? val.slice(0, -1) : val;\n/** make an Object's values into a Template Literals, and evaluate */\nexport const makeTemplate = (templateString) => (templateData) => new Function(`{${Object.keys(templateData).join(',')}}`, 'return `' + templateString + '`')(templateData);\nexport const toLower = (str) => isString(str) ? asString(str).toLowerCase().trim() : str;\nexport const toUpper = (str) => isString(str) ? asString(str).toUpperCase().trim() : str;\nexport const strlen = (str, min, max) => {\n assertString(str);\n assertCondition(str.length >= min && str.length <= (max ?? min), 'string length is not between specified min and max');\n return str;\n};\n/**\n * pad a string with leading character\n * @param\t\tnbr\tinput value to pad\n * @param\t\tlen\tfill-length (default: 2)\n * @param\t\tfill\tcharacter (default \\ for string and \\ for number)\n * @returns\tfixed-length string padded on the left with fill-character\n */\nexport const pad = (nbr = 0, len = 2, fill) => nbr.toString().padStart(len, nullToValue(fill, isNumeric(nbr) ? '0' : ' ').toString());\n/** pad a string with non-blocking spaces, to help right-align a display */\nexport const padString = (str, pad = 6) => (isNumeric(str) ? asNumber(str).toFixed(2).toString() : str.toString() ?? '').padStart(pad, '\\u007F');\n//# sourceMappingURL=string.library.js.map","import { __esDecorate, __runInitializers } from \"tslib\";\nimport { secure } from '#core/shared/utility.library.js';\nimport { Serializable } from '#core/shared/class.library.js';\nimport { stringify } from '#core/shared/serialize.library.js';\nimport { memoizeMethod } from '#core/shared/function.library.js';\nimport { ownEntries } from '#core/shared/reflection.library.js';\nimport { getProxy } from './proxy.library.js';\nimport { asType, isArray, isNumber } from '#core/shared/type.library.js';\n/** used to identify the Enumify type */ const tag = 'Enumify';\n/** helper method to create a property descriptor */\nfunction value(val) {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n value: val\n };\n}\n/**\n * private instance of the Enum Prototype, which is then Used to create each new Object-Enum\n*/\nconst ENUM = secure(Object.create(null, {\n count: memoizeMethod('count', function () { return this.entries().length; }),\n keys: memoizeMethod('keys', function () { return this.entries().map(([key]) => key); }),\n values: memoizeMethod('values', function () { return this.entries().map(([_, val]) => val); }),\n entries: memoizeMethod('entries', function () { return ownEntries(this, true); }),\n invert: memoizeMethod('invert', function () { return enumify(this.entries().reduce((acc, [key, val]) => ({ ...acc, [val]: key }), {})); }),\n toString: memoizeMethod('toString', function () { return stringify(this.toJSON()); }),\n has: value(function (key) { return this.keys().includes(key); }),\n includes: value(function (search) { return this.values().includes(search); }),\n keyOf: value(function (search) { return this.invert()[search]; }),\n extend: value(function (list) { return enumify.call(this, list); }),\n forEach: value(function (fn, thisArg) { this.entries().forEach((entry, index) => fn.call(thisArg, entry, index, this)); }),\n filter: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => (fn.call(thisArg, entry, index, this) ? Object.assign(acc, { [entry[0]]: entry[1] }) : acc), {})); }),\n map: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => { const res = fn.call(thisArg, entry, index, this); return Object.assign(acc, isArray(res) && res.length === 2 ? { [res[0]]: res[1] } : { [entry[0]]: res }); }, {})); }),\n [Symbol.iterator]: value(function () { return this.entries()[Symbol.iterator](); }),\n [Symbol.toStringTag]: value(tag),\n}));\nexport function enumify(list) {\n const proto = this ?? ENUM;\n const arg = asType(list);\n let stash = {};\n switch (arg.type) {\n case 'Enumify':\n case 'Object':\n Object.assign(stash, arg.value);\n break;\n case 'Array':\n arg.value.forEach((key, index) => {\n if (isNumber(key))\n throw new Error('Enumify: numeric keys are not supported');\n Object.assign(stash, { [key]: index });\n });\n break;\n default:\n throw new Error(`Enumify: invalid argument type: ${arg.type}`);\n }\n const target = Object.create(proto, Object.getOwnPropertyDescriptors(stash));\n return getProxy(target);\n}\n/** create an entry in the Serialization Registry to describe how to rebuild an Enum */\nlet Enumify = (() => {\n let _classDecorators = [Serializable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Enumify = class {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Enumify = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n constructor(list) {\n return enumify(list);\n }\n };\n return Enumify = _classThis;\n})();\nexport { Enumify };\n//# sourceMappingURL=enumerate.library.js.map","import { enumify } from '#core/shared/enumerate.library.js';\nimport { secure } from '#core/shared/utility.library.js';\n/**\n * Various enumerations used throughout Tempo library.\n * These are exported and added as static getters of the Tempo class.\n * Usage example:\n * ```typescript\n * \t\t\tconst dayNames = Tempo.WEEKDAY.keys();\t// ['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n * ```\n */\n/** */\nexport const WEEKDAY = enumify(['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']);\nexport const WEEKDAYS = enumify(['Everyday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']);\nexport const MONTH = enumify(['All', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);\nexport const MONTHS = enumify(['Every', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nexport const SEASON = enumify({ Summer: 'summer', Autumn: 'autumn', Winter: 'winter', Spring: 'spring' });\nexport const COMPASS = enumify({ North: 'north', East: 'east', South: 'south', West: 'west' });\n/** number of seconds in a time unit */\nexport const DURATION = enumify({\n /** approx number of seconds in a year */ year: 31_536_000,\n /** approx number of seconds in a month */ month: 2_628_000,\n /** number of seconds in a week */ week: 604_800,\n /** number of seconds in a day */ day: 86_400,\n /** number of seconds in an hour */ hour: 3_600,\n /** number of seconds in a minute */ minute: 60,\n /** one second */ second: 1,\n /** number of seconds in a millisecond */ millisecond: .001,\n /** number of seconds in a microsecond */ microsecond: .000_001,\n /** number of seconds in a nanosecond */ nanosecond: .000_000_001,\n});\n/** number of milliseconds in a time unit */\nexport const DURATIONS = enumify({\n /** approx number of milliseconds in a year */ years: DURATION.year * 1_000,\n /** approx number of milliseconds in a month */ months: DURATION.month * 1_000,\n /** number of milliseconds in a week */ weeks: DURATION.week * 1_000,\n /** number of milliseconds in a day */ days: DURATION.day * 1_000,\n /** number of milliseconds in an hour */ hours: DURATION.hour * 1_000,\n /** number of milliseconds in a minute */ minutes: DURATION.minute * 1_000,\n /** number of milliseconds in a second */ seconds: DURATION.second * 1_000,\n /** one millisecond */ milliseconds: DURATION.millisecond * 1_000,\n /** number of milliseconds in a microsecond */ microseconds: DURATION.microsecond * 1_000,\n /** number of milliseconds in a nanosecond */ nanoseconds: Number((DURATION.nanosecond * 1_000).toPrecision(6)),\n});\n/** pre-defined Format code short-cuts */\nexport const FORMAT = enumify({\n /** useful for standard date display */ display: '{www}, {dd} {mmm} {yyyy}',\n /** useful for standard datestamps */ weekDate: '{www}, {yyyy}-{mmm}-{dd}',\n /** useful for standard timestamps */ weekTime: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}',\n /** useful for standard full timestamps */ weekStamp: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}',\n /** useful for readable month and day */ dayMonth: '{dd}-{mmm}',\n /** useful for Date */ dayDate: '{dd}-{mmm}-{yyyy}',\n /** display with Time */ dayTime: '{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}',\n /** useful for stamping logs */ logStamp: '{yyyy}{mm}{dd}T{hhmiss}.{ff}',\n /** useful for sorting display-strings */ sortTime: '{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}',\n /** useful for sorting week order */ yearWeek: '{wy}{ww}',\n /** useful for sorting month order */ yearMonth: '{yyyy}{mm}',\n /** useful for sorting date order */ yearMonthDay: '{yyyy}{mm}{dd}',\n /** just Date portion */ date: '{yyyy}-{mm}-{dd}',\n /** just Time portion */ time: '{hh}:{mi}:{ss}',\n});\nexport const LIMIT = secure({\n /** Tempo(31-Dec-9999.23:59:59).ns */ maxTempo: Temporal.Instant.from('9999-12-31T23:59:59.999999999+00:00').epochNanoseconds,\n /** Tempo(01-Jan-1000.00:00:00).ns */ minTempo: Temporal.Instant.from('1000-01-01T00:00+00:00').epochNanoseconds,\n});\nexport const ELEMENT = enumify({\n yy: 'year',\n mm: 'month',\n ww: 'week',\n dd: 'day',\n hh: 'hour',\n mi: 'minute',\n ss: 'second',\n ms: 'millisecond',\n us: 'microsecond',\n ns: 'nanosecond',\n});\nexport const MUTATION = enumify(ELEMENT.values()).extend(['event', 'period', 'clock', 'time', 'date', 'start', 'mid', 'end']);\nexport const ZONED_DATE_TIME = enumify(['value', 'timeZoneId', 'calendarId', 'monthCode', 'offset', 'timeZone']).extend(ELEMENT.values());\nexport const OPTION = enumify(['value', 'mdyLocales', 'mdyLayouts', 'store', 'discovery', 'debug', 'catch', 'timeZone', 'calendar', 'locale', 'pivot', 'sphere', 'timeStamp', 'snippet', 'layout', 'event', 'period', 'formats', 'plugins']);\nexport const PARSE = enumify(['mdyLocales', 'mdyLayouts', 'formats', 'pivot', 'snippet', 'layout', 'event', 'period', 'anchor', 'value', 'discovery', 'plugins']);\n//# sourceMappingURL=tempo.enum.js.map","import { isDefined } from '#core/shared/type.library.js';\nconst SCHEMA = [\n ['year', 'yy'],\n ['month', 'mm'],\n ['day', 'dd'],\n ['hour', 'hh'],\n ['minute', 'mi'],\n ['second', 'ss'],\n ['millisecond', 'ms'],\n ['microsecond', 'us'],\n ['nanosecond', 'ns']\n];\n/**\n * find where a Tempo fits within a range of DateTime\n */\nexport function getTermRange(tempo, list, keyOnly = true) {\n const sorted = [...list]\n .sortBy('year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond')\n .toReversed();\n const match = sorted\n .find(range => {\n for (const [rKey, sKey] of SCHEMA) {\n const val = range[rKey];\n if (isDefined(val)) {\n const sVal = tempo[sKey];\n if (sVal > val)\n return true;\n if (sVal < val)\n return false;\n }\n }\n return true; // fallback if DateTime exactly matches a range criteria\n })\n ?? sorted.at(0); // fallback to wraparound at first item\n return keyOnly\n ? match?.key\n : match;\n}\n//# sourceMappingURL=term.utils.js.map","import { cloneify } from '#core/shared/serialize.library.js';\nimport { COMPASS } from '#core/tempo.config/tempo.enum.js';\nimport { getTermRange } from './term.utils.js';\n/** definition of fiscal quarter ranges */\nconst ranges = [\n [\n { key: 'Q1', day: 1, month: 1, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q2', day: 1, month: 4, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q3', day: 1, month: 7, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q4', day: 1, month: 10, fiscal: 0, sphere: COMPASS.North },\n ], [\n { key: 'Q1', day: 1, month: 7, fiscal: 1, sphere: COMPASS.South },\n { key: 'Q2', day: 1, month: 10, fiscal: 1, sphere: COMPASS.South },\n { key: 'Q3', day: 1, month: 1, fiscal: 0, sphere: COMPASS.South },\n { key: 'Q4', day: 1, month: 4, fiscal: 0, sphere: COMPASS.South },\n ]\n];\nexport const key = 'qtr';\nexport const scope = 'quarter';\nexport const description = 'Fiscal Quarter';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n const { yy, config: { sphere } } = this;\n const south = sphere !== COMPASS.North; // false = North, true = South\n const list = cloneify(ranges[+south]); // deep clone the range\n list.forEach(itm => itm.fiscal += yy); // calc the fiscal-year for quarter\n return getTermRange(this, list, keyOnly); // return the range\n}\n//# sourceMappingURL=term.quarter.js.map","import { cloneify } from '#core/shared/serialize.library.js';\nimport { COMPASS } from '#core/tempo.config/tempo.enum.js';\nimport { getTermRange } from './term.utils.js';\n/** definition of meteorological season ranges */\nconst ranges = [\n [\n { key: 'Spring', day: 20, month: 3, symbol: 'Flower', sphere: COMPASS.North },\n { key: 'Summer', day: 21, month: 6, symbol: 'Sun', sphere: COMPASS.North },\n { key: 'Autumn', day: 23, month: 9, symbol: 'Leaf', sphere: COMPASS.North },\n { key: 'Winter', day: 22, month: 12, symbol: 'Snowflake', sphere: COMPASS.North },\n ], [\n { key: 'Spring', day: 1, month: 9, symbol: 'Flower', sphere: COMPASS.South },\n { key: 'Summer', day: 1, month: 12, symbol: 'Sun', sphere: COMPASS.South },\n { key: 'Autumn', day: 1, month: 3, symbol: 'Leaf', sphere: COMPASS.South },\n { key: 'Winter', day: 1, month: 6, symbol: 'Snowflake', sphere: COMPASS.South },\n ], [\n { key: 'Spring', day: 1, month: 3, symbol: 'Flower', trait: 'A time of renewal and growth' },\n { key: 'Summer', day: 1, month: 6, symbol: 'Sun', trait: 'A period of heat and fruition' },\n { key: 'Autumn', day: 1, month: 9, symbol: 'Leaf', trait: 'A time for harvest and contraction' },\n { key: 'Winter', day: 1, month: 12, symbol: 'Snowflake', trait: 'A period of stillness and consolidation' },\n ]\n];\nexport const key = 'szn';\nexport const scope = 'season';\nexport const description = 'Meteorlogical season';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n const { config: { sphere } } = this;\n const south = sphere !== COMPASS.North; // false = North, true = South\n const list = cloneify(ranges[+south]);\n if (!keyOnly) {\n const cn = getTermRange(this, ranges[2], false); // get the chinese season for the current day/month\n list.forEach(item => item['CN'] = cn); // add the chinese season to each range item\n }\n return getTermRange(this, list, keyOnly);\n}\n//# sourceMappingURL=term.season.js.map","import { getTermRange } from './term.utils.js';\nimport { cloneify } from '#core/shared/serialize.library.js';\n/** definition of astrological zodiac ranges */\nconst ranges = [\n [\n { key: 'Aquarius', day: 20, month: 1, symbol: 'Ram', longitude: 300, planet: 'Uranus' },\n { key: 'Pisces', day: 19, month: 2, symbol: 'Fish', longitude: 330, planet: 'Neptune' },\n { key: 'Aries', day: 21, month: 3, symbol: 'Ram', longitude: 0, planet: 'Mars' },\n { key: 'Taurus', day: 20, month: 4, symbol: 'Bull', longitude: 30, planet: 'Venus' },\n { key: 'Gemini', day: 21, month: 5, symbol: 'Twins', longitude: 60, planet: 'Mercury' },\n { key: 'Cancer', day: 22, month: 6, symbol: 'Crab', longitude: 90, planet: 'Moon' },\n { key: 'Leo', day: 23, month: 7, symbol: 'Lion', longitude: 120, planet: 'Sun' },\n { key: 'Virgo', day: 23, month: 8, symbol: 'Maiden', longitude: 150, planet: 'Mercury' },\n { key: 'Libra', day: 23, month: 9, symbol: 'Scales', longitude: 180, planet: 'Venus' },\n { key: 'Scorpio', day: 23, month: 10, symbol: 'Scorpion', longitude: 210, planet: 'Pluto & Mars' },\n { key: 'Sagittarius', day: 22, month: 11, symbol: 'Centaur', longitude: 240, planet: 'Jupiter' },\n { key: 'Capricorn', day: 22, month: 12, symbol: 'Goat', longitude: 270, planet: 'Saturn' },\n ], [\n { key: 'Rat', traits: 'Adaptable, clever' },\n { key: 'Ox', traits: 'Diligent, strong' },\n { key: 'Tiger', traits: 'Passionate, courageous' },\n { key: 'Rabbit', traits: 'Artistic, gentle' },\n { key: 'Dragon', traits: 'Powerful, charismatic' },\n { key: 'Snake', traits: 'Wise, intuitive' },\n { key: 'Horse', traits: 'Energetic, independent' },\n { key: 'Goat', traits: 'Empathetic, calm' },\n { key: 'Monkey', traits: 'Smart, curious' },\n { key: 'Rooster', traits: 'Observant, hardworking' },\n { key: 'Dog', traits: 'Loyal, honest' },\n { key: 'Pig', traits: 'Compassionate, generous' },\n ], [\n { key: 'Wood' },\n { key: 'Fire' },\n { key: 'Earth' },\n { key: 'Metal' },\n { key: 'Water' },\n ]\n];\nexport const key = 'zdc';\nexport const scope = 'zodiac';\nexport const description = 'Astrological Zodiac sign';\n/** determine where the current Tempo instance fits within the above ranges */\nexport function define(keyOnly) {\n const list = cloneify(ranges[0]); // make a copy of the ranges array\n if (!keyOnly) {\n const cn = getChineseZodiac(this.yy); // get the chinese zodiac for the current year\n list.forEach(item => item['CN'] = cn); // add the chinese zodiac to each item\n }\n return getTermRange(this, list, keyOnly);\n}\n/** get the chinese zodiac for a given year */\nfunction getChineseZodiac(year) {\n const animalIndex = (year - 4) % 12; // calculate the animal index\n const elementIndex = Math.floor(((year - 4) % 10) / 2); // calculate the element index based on the last digit of the year\n const yinYang = year % 2 === 0 ? 'Yang' : 'Yin'; // determine Yin or Yang\n return {\n animal: ranges[1][animalIndex].key,\n traits: ranges[1][animalIndex].traits,\n element: ranges[2][elementIndex].key,\n yinYang: yinYang\n };\n}\n//# sourceMappingURL=term.zodiac.js.map","import { getTermRange } from './term.utils.js';\n/** definition of daily time periods */\nconst ranges = [\n { key: 'midnight', hour: 0 },\n { key: 'early', hour: 4 },\n { key: 'morning', hour: 8 },\n { key: 'midmorning', hour: 10 },\n { key: 'midday', hour: 12 },\n { key: 'afternoon', hour: 15, minute: 30 },\n { key: 'evening', hour: 18 },\n { key: 'night', hour: 20 },\n];\nexport const key = 'per';\nexport const scope = 'period';\nexport const description = 'Daily time period';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n return getTermRange(this, ranges, keyOnly);\n}\n//# sourceMappingURL=term.timeline.js.map","/**\n * Built-in term plugin registrations.\n *\n * This module exports a registration function to be called by tempo.class.ts.\n *\n * returns an array of Terms to be loaded into Tempo.#terms\n */\nimport * as qtr from './term.quarter.js';\nimport * as szn from './term.season.js';\nimport * as zdc from './term.zodiac.js';\nimport * as per from './term.timeline.js';\nexport default [\n { key: qtr.key, scope: qtr.scope, description: qtr.description, define: qtr.define },\n { key: szn.key, scope: szn.scope, description: szn.description, define: szn.define },\n { key: zdc.key, scope: zdc.scope, description: zdc.description, define: zdc.define },\n { key: per.key, scope: per.scope, description: per.description, define: per.define },\n];\n//# sourceMappingURL=term.import.js.map","import { looseIndex } from '#core/shared/object.library.js';\nimport { secure } from '#core/shared/utility.library.js';\n// BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW\n// TEMPO functionality heavily depends on these patterns\n/** common RegExp patterns */\nexport const Match = {\n /** match all {} pairs, if they start with a word char */ braces: /{([\\w]+(?:\\.[\\w]+)*)}/g,\n /** named capture-group, if it starts with a letter */ captures: /\\(\\?<([a-zA-Z][\\w]*)>(.*?)(?=) */ modifier: /[\\+\\-\\<\\>][\\=]?|this|next|prev|last/,\n /** offset post keywords (ago|hence) */ affix: /ago|hence/,\n /** strip out these characters from a string */ strips: /\\(|\\)/g,\n /** whitespace characters */ spaces: /\\s+/g,\n /** Z character */ zed: /^Z$/,\n};\n/** Tempo Symbol registry */\nexport const Token = looseIndex()({\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols\n /** year */ yy: Symbol('yy'),\n /** month */ mm: Symbol('mm'),\n /** day */ dd: Symbol('dd'),\n /** hour */ hh: Symbol('hh'),\n /** minute */ mi: Symbol('mi'),\n /** second */ ss: Symbol('ss'),\n /** fraction */ ff: Symbol('ff'),\n /** meridiem */ mer: Symbol('mer'),\n /** short weekday name */ www: Symbol('www'),\n /** relative-suffix */ afx: Symbol('afx'),\n /** time-suffix */ sfx: Symbol('sfx'),\n /** time unit */ unt: Symbol('unt'),\n /** separator */ sep: Symbol('sep'),\n /** modifier */ mod: Symbol('mod'),\n /** generic number */ nbr: Symbol('nbr'),\n /** Tempo event */ evt: Symbol('evt'),\n /** Tempo period */ per: Symbol('per'),\n /** time zone offset */ tzd: Symbol('tzd'),\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Layout Symbols\n /** date */ dt: Symbol('date'),\n /** time */ tm: Symbol('time'),\n /** date and time */ dtm: Symbol('dateTime'),\n /** day-month-year */ dmy: Symbol('dayMonthYear'),\n /** month-day-year */ mdy: Symbol('monthDayYear'),\n /** year-month-day */ ymd: Symbol('yearMonthDay'),\n /** day of month offset */ off: Symbol('offset'),\n /** weekDay */ wkd: Symbol('weekDay'),\n /** relative offset (years, days, hours, etc) */ rel: Symbol('relativeOffset'),\n /** timezone/calendar brackets */ brk: Symbol('brackets'),\n});\n/**\n * user will need to know these in order to configure their own patterns\n * Tempo.Snippet is a simple regex pattern object\t\t\t\t\t\te.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ }\n * Tempo.Layout is a string-combination of Snippet names\t\te.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?'\n * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex.\n * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument\n */\n/**\n * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy')\n */\n// Note: computed Components ('evt', 'per') are added during 'Tempo.init()' (for static) and/or 'new Tempo()' (per instance)\nexport const Snippet = looseIndex()({\n [Token.yy]: /(?([0-9]{2})?[0-9]{2})/, // arbitrary upper-limit of yy=9999\n [Token.mm]: /(?[0\\s]?[1-9]|1[0-2]|Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)/, // month-name (abbrev or full) or month-number 01-12\n [Token.dd]: /(?
[0\\s]?[1-9]|[12][0-9]|3[01])(?:\\s?(?:st|nd|rd|th))?/, // day-number 01-31\n [Token.hh]: /(?2[0-4]|[01]?[0-9])/, // hour-number 00-24\n [Token.mi]: /(\\:(?[0-5][0-9]))/, // minute-number 00-59\n [Token.ss]: /(\\:(?[0-5][0-9]))/, // seconds-number 00-59\n [Token.ff]: /(\\.(?[0-9]{1,9}))/, // fractional-seconds up-to 9-digits\n [Token.mer]: /(\\s*(?am|pm))/, // meridiem suffix (am,pm)\n [Token.sfx]: /((?:{sep}+|T)({tm}){tzd}?)/, // time-pattern suffix 'T {tm} Z'\n [Token.wkd]: /(?Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)/, // day-name (abbrev or full)\n [Token.tzd]: /(?Z|(?:\\+(?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:00)|-(?:(?:0[0-9]|1[0-1]):?[0-5][0-9]|12:00)))/, // time-zone offset\t+14:00 to -12:00\n [Token.nbr]: /(?[0-9]*)/, // modifier count\n [Token.afx]: new RegExp(`((s)? (?${Match.affix.source}))?{sep}?`), // affix optional plural 's' and (ago|hence)\n [Token.mod]: new RegExp(`((?${Match.modifier.source})?{nbr} *)`), // modifier (+,-,<,<=,>,>=) plus optional offset-count\n [Token.sep]: new RegExp(`(?:${Match.separator.source})`), // date-input separator character \"/\\\\-., \" (non-capture group)\n [Token.unt]: /(?year|month|week|day|hour|minute|second|millisecond)(?:s)?/, // useful for '2 days ago' etc\n [Token.brk]: /(\\[(?[^\\]]+)\\](?:\\[(?[^\\]]+)\\])?)?/, // timezone/calendar brackets [...]\n});\n/**\n * a {layout} is a Record of snippet-combinations describing an input DateTime argument\n * the Layout's keys are in the order that they will be checked against an input value\n */\nexport const Layout = looseIndex()({\n [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))', // calendar or event\n [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period\n [Token.dtm]: '({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?', // calendar/event and clock/period\n [Token.dmy]: '({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?', // day-month(-year)\n [Token.mdy]: '({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?', // month-day(-year)\n [Token.ymd]: '({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?', // year-month(-day)\n [Token.wkd]: '{mod}?{wkd}{afx}?{sfx}?', // special layout (no {dt}!) used for weekday calcs (only one that requires {wkd} pattern)\n [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset\n [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago)\n});\n/**\n * an {event} is a Record of regex-pattern-like-string keys that describe Date strings.\n * values can be a string or a function.\n * if assigning a function, use standard 'function()' syntax to allow for 'this' binding.\n * also, a function should always have a .toString() method which returns a parse-able Date string\n */\nexport const Event = looseIndex()({\n 'new.?years? ?eve': '31 Dec',\n 'nye': '31 Dec',\n 'new.?years?( ?day)?': '01 Jan',\n 'ny': '01 Jan',\n 'christmas ?eve': '24 Dec',\n 'christmas': '25 Dec',\n 'xmas ?eve': '24 Dec',\n 'xmas': '25 Dec',\n 'now': function () { return this.toPlainDateTime(); },\n 'today': function () { return this.toPlainDate(); },\n 'tomorrow': function () { return this.toPlainDate().add({ days: 1 }); },\n 'yesterday': function () { return this.toPlainDate().add({ days: -1 }); },\n});\n/**\n * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings.\n * values can be a string or a function.\n * if using a function, use regular 'function()' syntax to allow for 'this' binding.\n */\nexport const Period = looseIndex()({\n 'mid[ -]?night': '24:00',\n 'morning': '8:00',\n 'mid[ -]?morning': '10:00',\n 'mid[ -]?day': '12:00',\n 'noon': '12:00',\n 'after[ -]?noon': '3:00pm',\n 'evening': '18:00',\n 'night': '20:00',\n});\n/**\n * a {timeZone} alias dictionary mapping common abbreviations to IANA strings.\n * Tempo will check this registry to convert abbreviations before passing them to Temporal.\n */\nexport const TimeZone = looseIndex()({\n 'utc': 'UTC',\n 'gmt': 'Europe/London',\n 'est': 'America/New_York',\n 'cst': 'America/Chicago',\n 'mst': 'America/Denver',\n 'pst': 'America/Los_Angeles',\n 'aest': 'Australia/Sydney',\n 'acst': 'Australia/Adelaide',\n 'awst': 'Australia/Perth',\n 'nzt': 'Pacific/Auckland',\n 'cet': 'Europe/Paris',\n 'eet': 'Europe/Helsinki',\n 'ist': 'Asia/Kolkata',\n 'npt': 'Asia/Kathmandu',\n 'jst': 'Asia/Tokyo',\n});\n/** Reasonable default options for initial Tempo config */\nexport const Default = secure({\n /** log to console */ debug: false,\n /** catch or throw Errors */ catch: false,\n /** used to parse two-digit years*/ pivot: 75, /** @link https://en.wikipedia.org/wiki/Date_windowing */\n /** precision to measure timestamps (ms | us) */ timeStamp: 'ms',\n /** calendaring system */ calendar: 'iso8601',\n /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https://en.wikipedia.org/wiki/Date_format_by_country */\n /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']],\n});\n//# sourceMappingURL=tempo.default.js.map","import { asString } from '#core/shared/coercion.library.js';\nimport { extract } from '#core/shared/object.library.js';\nimport { ownEntries } from '#core/shared/reflection.library.js';\nimport { stringify } from '#core/shared/serialize.library.js';\nimport { isNumber, isDate, isTempo, isObject, isDefined, isUndefined, isFunction, nullToValue } from '#core/shared/type.library.js';\n// adapted from https://jsbin.com/insert/4/edit?js,output\n/** insert a value into an Array by its sorted position */\nexport const sortInsert = (arr = [], val, key) => {\n const obj = isObject(val) && isDefined(key); // array of Objects\n let low = 0, high = arr.length;\n while (low < high) {\n const mid = (low + high) >>> 1; // divide by 2\n const source = obj\n ? arr[mid][key] // array of Object values\n : arr[mid]; // assume Primitive values\n const target = obj\n ? val[key]\n : val;\n if (source < target)\n low = mid + 1;\n else\n high = mid;\n }\n arr.splice(low, 0, val); // mutate original Array\n return arr;\n};\n/** provide a sort-function to order a set of keys */\nexport function sortBy(...keys) {\n const sortOptions = keys // coerce string => SortBy\n .flat() // flatten Array-of-Array\n .map(key => isObject(key) ? key : { field: stringify(key) }); // build Array of sort-options\n return (left, right) => {\n let result = 0; // 0 = same, -1 = leftright\n sortOptions.forEach(key => {\n if (result === 0) { // no need to look further if result !== 0\n const dir = key.dir === 'desc' ? -1 : 1;\n const field = key.field + (key.index ? `[${key.index}]` : '');\n const valueA = extract(left, field, nullToValue(key.default, 0));\n const valueB = extract(right, field, nullToValue(key.default, 0));\n switch (true) {\n case isNumber(valueA) && isNumber(valueB):\n case isDate(valueA) && isDate(valueB):\n case isTempo(valueA) && isTempo(valueB):\n result = dir * (valueA - valueB);\n break;\n default:\n result = dir * asString(valueA)?.localeCompare(asString(valueB));\n break;\n }\n }\n });\n return result;\n };\n}\n/** return an array sorted-by a series of keys */\nexport function sortKey(array, ...keys) {\n return array.sort(sortBy(...keys));\n}\nexport function byKey(arr, fnKey, ...keys) {\n if (isFunction(fnKey))\n return Object.groupBy(arr, fnKey);\n const keyed = [fnKey] // mapFn is a keyof T\n .concat(keys) // append any trailing keyof T[]\n .flat(); // flatten Array-of-Array\n return Object.groupBy(arr, itm => // group an array into an object with named keys\n keyed\n .map(key => isUndefined(itm[key]) ? '' : stringify(itm[key]))\n .join('.'));\n}\nexport function byLkp(arr, fnKey, ...keys) {\n const group = isFunction(fnKey)\n ? byKey(arr, fnKey) // group by the callback function\n : byKey(arr, fnKey, ...keys); // group by the list of keys\n return ownEntries(group)\n .reduce((acc, [key, grp]) => Object.assign(acc, { [key]: grp?.pop() }), {});\n}\n//# sourceMappingURL=array.library.js.map","import { trimAll, toProperCase } from '#core/shared/string.library.js';\nimport { byKey, byLkp, sortKey } from '#core/shared/array.library.js';\nimport { asArray } from '#core/shared/coercion.library.js';\n// Prototype extensions\n// Remember to define any imports as a Function Declaration (not a Function Expression)\n// so that they are 'hoisted' prior to extending a prototype\n/**\n * extend an Object's prototype to include new method, if no clash\n */\nexport const patch = (proto, property, method) => {\n if (Object.hasOwn(proto.prototype, property)) { // if already defined,\n if (trimAll(method.toString()) !== trimAll(proto.prototype?.[property]?.toString()))\n console.warn(`${proto.name}.${property} already defined`); // show warning if different method definition\n }\n else {\n Object.defineProperty(proto.prototype, property, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: method,\n });\n }\n};\npatch(String, 'trimAll', function (pat) { return trimAll(this, pat); });\npatch(String, 'toProperCase', function () { return toProperCase(this); });\nfunction sorted(...keys) { return sortKey(this, ...keys); }\npatch(Array, 'orderBy', sorted); // order array by named keys\npatch(Array, 'sortBy', sorted); // sort array by named keys\nfunction keyed(...keys) { return byKey(this, ...keys); }\nfunction lookup(...keys) { return byLkp(this, ...keys); }\npatch(Array, 'keyedBy', keyed); // reduce array by named keys\npatch(Array, 'lookupBy', lookup); // reduce array by named keys, only one entry per key\npatch(Array, 'tap', function (fn) {\n fn(this); // run an arbitrary function\n return this; // then return the original array\n});\npatch(Array, 'clear', function () {\n this.fill(null).length = 0; // wipe the contents, then set the 'length' to zero\n return this;\n});\npatch(Array, 'distinct', function (mapfn) {\n return mapfn\n ? this.map(mapfn).distinct() // run the mapping selector, then recurse\n : Array.from(new Set(this)); // eliminate duplicates\n});\npatch(Array, 'cartesian', function (...args) {\n const [a, b = [], ...c] = args.length === 0 ? this : args;\n const cartFn = (a, b) => asArray([]).concat(...a.map(d => b.map(e => asArray([]).concat(d, e))));\n return b.length\n ? this.cartesian(cartFn(a, b), ...c) // run the cartFn function, then recurse\n : asArray(a || []); // return the collated result\n});\n//# sourceMappingURL=prototype.library.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport '#core/temporal.polyfill.js'; // side-effect runtime check for Temporal\n// #region library modules~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { Logify } from '#core/shared/logify.class.js';\nimport { ifDefined } from '#core/shared/object.library.js';\nimport { secure } from '#core/shared/utility.library.js';\nimport { Immutable, Serializable } from '#core/shared/class.library.js';\nimport { asArray, asNumber, asInteger, isNumeric, ifNumeric } from '#core/shared/coercion.library.js';\nimport { cleanify, stringify } from '#core/shared/serialize.library.js';\nimport { getStorage, setStorage } from '#core/shared/storage.library.js';\nimport { ownKeys, ownEntries, getAccessors, omit } from '#core/shared/reflection.library.js';\nimport { getProxy } from '#core/shared/proxy.library.js';\nimport { getContext, CONTEXT } from '#core/shared/utility.library.js';\nimport { pad, singular, toProperCase, trimAll } from '#core/shared/string.library.js';\nimport { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#core/shared/type.library.js';\nimport * as enums from '#core/tempo.config/tempo.enum.js';\nimport registerTerms from '#core/tempo.config/terms/term.import.js';\nimport { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#core/tempo.config/tempo.default.js';\nimport '#core/shared/prototype.library.js'; // patch prototypes\n// #region Const variables\n/** key to use for storage / globalThis Symbol */ export const $Tempo = Symbol.for('$Tempo');\n/** current execution context*/ const Context = getContext();\n// #endregion Const variables\n/**\n * # Tempo\n * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects.\n * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API.\n */\nlet Tempo = (() => {\n var _a, _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_conformToGroups;\n let _classDecorators = [Serializable, Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Tempo = _a = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Tempo\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Tempo = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n // #region Static enum properties~~~~~~~~~~~~~~~~~~~~~~~~~\n /** Weekday names (short-form) */ static get WEEKDAY() { return enums.WEEKDAY; }\n /** Weekday names (long-form) */ static get WEEKDAYS() { return enums.WEEKDAYS; }\n /** Month names (short-form) */ static get MONTH() { return enums.MONTH; }\n /** Month names (long-form) */ static get MONTHS() { return enums.MONTHS; }\n /** Time durations as seconds (singular) */ static get DURATION() { return enums.DURATION; }\n /** Time durations as milliseconds (plural) */ static get DURATIONS() { return enums.DURATIONS; }\n /** Quarterly Seasons */ static get SEASON() { return enums.SEASON; }\n /** Compass cardinal points */ static get COMPASS() { return enums.COMPASS; }\n /** Tempo to Temporal DateTime Units map */ static get ELEMENT() { return enums.ELEMENT; }\n /** Pre-configured format {name -> string} pairs */ static get FORMAT() { return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.formats; }\n /** some useful Dates */ static get LIMIT() { return enums.LIMIT; }\n static {\n // #endregion\n // #region Static private properties~~~~~~~~~~~~~~~~~~~~~~\n _Tempo_dbg = { value: new Logify('Tempo', {\n debug: Default?.debug ?? false,\n catch: Default?.catch ?? false\n }) };\n }\n static {\n /** Tempo state for the global configuration */ _Tempo_global = { value: {} };\n }\n static {\n /** a collection of parse rule-matches */ _Tempo_pending = { value: void 0 };\n }\n static {\n /** cache for next-available 'usr' Token key */ _Tempo_usrCount = { value: 0 };\n }\n static {\n /** mutable list of registered term plugins */ _Tempo_terms = { value: [] };\n }\n static {\n /** try to infer hemisphere using the timezone's daylight-savings setting */\n _Tempo_setSphere = { value: (shape, options) => {\n if (isUndefined(shape.config.timeZone) || __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, options, 'sphere'))\n return shape.config.sphere; // already specified or no timeZone to calculate from\n // use a fixed date (2024-01-01) to compare offsets for hemisphere detection\n const zdt = new Temporal.ZonedDateTime(BigInt(1_704_067_200) * BigInt(1_000_000_000), shape.config.timeZone);\n const jan = zdt.with({ day: 1, month: 1 }).offsetNanoseconds;\n const jun = zdt.with({ day: 1, month: 6 }).offsetNanoseconds;\n const dst = Math.sign(jan - jun); // timeZone offset difference between Jan and Jun\n switch (dst) {\n case -1:\n return Tempo.COMPASS.North; // clock moves backward in Northern hemisphere\n case 1:\n return Tempo.COMPASS.South; // clock moves forward in Southern hemisphere\n case 0:\n default:\n return void 0; // timeZone does not observe DST\n }\n } };\n }\n static {\n /** properCase week-day / calendar-month */\n _Tempo_prefix = { value: (str) => toProperCase(String(str).substring(0, 3)) };\n }\n static {\n /** get first Canonical name of a supplied locale */\n _Tempo_locale = { value: (locale) => {\n let language;\n try { // lookup locale\n language = Intl.getCanonicalLocales(locale.replace('_', '-'))[0];\n }\n catch (error) { } // catch unknown locale\n const global = Context.global;\n return language ??\n global?.navigator?.languages?.[0] ?? // fallback to current first navigator.languages[]\n global?.navigator?.language ?? // else navigator.language\n Default.locale ?? // else default locale\n locale; // cannot determine locale\n } };\n }\n // #endregion Static private methods\n // #region Static public methods~~~~~~~~~~~~~~~~~~~~~~~~~~\n /**\n * Bootstrap the library with a Custom Global Discovery object.\n *\n * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern\n * and automatically calls `Tempo.init()` to apply the discovered configuration.\n *\n * @param config - The Global Discovery object to register.\n * @returns The resolved global configuration.\n */\n static discover(config) {\n globalThis[$Tempo] = config;\n return this.init();\n }\n /**\n * Initializes the global default configuration for all subsequent `Tempo` instances.\n *\n * Settings are inherited in this priority:\n * 1. Reasonable library defaults (defined in tempo.config.js)\n * 2. Persistent storage (e.g. localStorage), if available.\n * 3. `options` provided to this method.\n *\n * @param options - Configuration overrides to apply globally.\n * @returns The resolved global configuration.\n */\n static init(options = {}) {\n if (isEmpty(options)) { // if no options supplied, reset all\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse = {\n snippet: Object.assign({}, Snippet),\n layout: Object.assign({}, Layout),\n event: Object.assign({}, Event),\n period: Object.assign({}, Period),\n mdyLocales: __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, Default.mdyLocales),\n mdyLayouts: asArray(Default.mdyLayouts),\n pivot: Default.pivot,\n };\n const { timeZone, calendar } = Intl.DateTimeFormat().resolvedOptions();\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config = Object.assign({}, omit({ ...Default }, ...enums.PARSE.keys()), // use Default as base, omit parse-related\n {\n calendar,\n timeZone,\n locale: __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_locale).call(Tempo),\n discovery: Symbol.keyFor($Tempo),\n formats: Object.create(enums.FORMAT),\n scope: 'global'\n });\n __classPrivateFieldSet(Tempo, _classThis, 0, \"f\", _Tempo_usrCount); // reset user-key counter\n for (const key of Object.keys(Token)) // purge user-allocated Tokens\n if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys\n delete Token[key];\n Tempo.addTerm(...registerTerms); // register built-in term plugins\n const storeKey = Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), $Tempo));\n }\n else {\n const discovery = options.discovery ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.discovery ?? Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), discovery), options);\n }\n if (Context.type === CONTEXT.Browser || options.debug === true)\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(Tempo.config, 'Tempo:', __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n return Tempo.config;\n }\n /** release global config and reset library to defaults */\n static [(_Tempo_proto = function _Tempo_proto(obj) { return Object.getPrototypeOf(obj); }, _Tempo_hasOwn = function _Tempo_hasOwn(obj, key) { return Object.hasOwn(obj, key); }, _Tempo_isLocal = function _Tempo_isLocal(shape) { return shape.config.scope === 'local'; }, _Tempo_create = function _Tempo_create(obj, name) { return Object.create(__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, obj)[name]); }, _Tempo_setEvents = function _Tempo_setEvents(shape) {\n const events = ownEntries(shape.parse.event, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'event') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'isMonthDay'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = events\n .map(([pat, _], idx) => `(?<${src}evt${idx}>${pat})`) // assign a number to the pattern\n .join('|'); // make an 'Or' pattern for the event-keys\n if (groups) {\n const protoEvt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.evt]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoEvt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.evt, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n if (shape.parse.isMonthDay) {\n const protoDt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.layout)[Token.dt];\n const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})';\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || localDt !== protoDt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n shape.parse.layout = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'layout');\n Object.defineProperty(shape.parse.layout, Token.dt, {\n value: localDt,\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_setPeriods = function _Tempo_setPeriods(shape) {\n const periods = ownEntries(shape.parse.period, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'period'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = periods\n .map(([pat, _], idx) => `(?<${src}per${idx}>${pat})`) // {pattern} is the 1st element of the tuple\n .join('|'); // make an 'or' pattern for the period-keys\n if (groups) {\n const protoPer = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.per]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoPer) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.per, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_isMonthDay = function _Tempo_isMonthDay(shape) {\n const monthDay = [...asArray(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.mdyLocales)];\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales'))\n monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global)\n return monthDay.some(mdy => {\n const tzs = mdy.timeZones ?? mdy.getTimeZones?.() ?? [];\n return tzs.includes(shape.config.timeZone);\n });\n }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) {\n const layouts = ownEntries(shape.parse.layout); // get entries of Layout Record\n const swap = shape.parse.mdyLayouts; // get the swap-tuple\n let chg = false; // no need to rebuild, if no change\n swap\n .forEach(([dmy, mdy]) => {\n const idx1 = layouts.findIndex(([key]) => key.description === dmy); // 1st swap element exists in {layouts}\n const idx2 = layouts.findIndex(([key]) => key.description === mdy); // 2nd swap element exists in {layouts}\n if (idx1 === -1 || idx2 === -1)\n return; // no pair to swap\n const swap1 = (idx1 < idx2) && shape.parse.isMonthDay; // we prefer {mdy} and the 1st tuple was found earlier than the 2nd\n const swap2 = (idx1 > idx2) && !shape.parse.isMonthDay; // we dont prefer {mdy} and the 1st tuple was found later than the 2nd\n if (swap1 || swap2) { // since {layouts} is an array, ok to swap by-reference\n [layouts[idx1], layouts[idx2]] = [layouts[idx2], layouts[idx1]];\n chg = true;\n }\n });\n if (chg)\n shape.parse.layout = Object.fromEntries(layouts); // rebuild Layout in new parse order\n }, _Tempo_setConfig = function _Tempo_setConfig(shape, ...options) {\n const mergedOptions = Object.assign({}, ...options);\n if (isEmpty(mergedOptions)) // nothing to do\n return;\n if (mergedOptions.store) // check for local-storage\n Object.assign(mergedOptions, { ...Tempo.readStore(mergedOptions.store), ...mergedOptions });\n /** helper to normalize snippet/layout Options into the target Config */\n const collect = (target, value, convert) => {\n const itm = asType(value);\n target ??= {};\n switch (itm.type) {\n case 'Object':\n ownEntries(itm.value)\n .forEach(([k, v]) => target[Tempo.getSymbol(k)] = convert(v));\n break;\n case 'String':\n case 'RegExp':\n target[Tempo.getSymbol()] = convert(itm.value);\n break;\n case 'Array':\n itm.value.forEach(elm => collect(target, elm, convert));\n break;\n }\n };\n ownEntries(mergedOptions)\n .forEach(([optKey, optVal]) => {\n if (isUndefined(optVal))\n return; // skip undefined values\n const arg = asType(optVal);\n switch (optKey) {\n case 'snippet':\n case 'layout':\n case 'event':\n case 'period':\n // lazy-shadowing: only create local object if it doesn't already exist on local shape\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, optKey))\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, optKey);\n const rule = shape.parse[optKey];\n if (['snippet', 'layout'].includes(optKey)) {\n collect(rule, arg.value, v => optKey === 'snippet'\n ? isRegExp(v) ? v : new RegExp(v)\n : isRegExp(v) ? v.source : v);\n }\n else {\n asArray(arg.value)\n .forEach(elm => ownEntries(elm).forEach(([key, val]) => rule[key] = val));\n }\n break;\n case 'mdyLocales':\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, arg.value);\n break;\n case 'mdyLayouts': // these are the 'layouts' that need to swap parse-order\n shape.parse[optKey] = asArray(arg.value);\n break;\n case 'pivot':\n shape.parse[\"pivot\"] = Number(arg.value);\n break;\n case 'config':\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, shape, arg.value);\n break;\n case 'timeZone':\n const zone = String(arg.value).toLowerCase();\n shape.config.timeZone = TimeZone[zone] ?? arg.value;\n break;\n case 'formats':\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.config, 'formats'))\n shape.config.formats = shape.config.formats.extend({}); // shadow parent prototype\n if (isObject(arg.value))\n shape.config.formats = shape.config.formats.extend(arg.value);\n break;\n case 'discovery':\n shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal;\n break;\n case 'plugins':\n asArray(optVal).forEach(p => this.extend(p));\n break;\n case 'anchor':\n break; // internal anchor used for relativity parsing\n default: // else just add to config\n Object.assign(shape.config, { [optKey]: optVal });\n break;\n }\n });\n const isMonthDay = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isMonthDay).call(Tempo, shape);\n if (isMonthDay !== __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local'\n shape.parse.isMonthDay = isMonthDay;\n shape.config.sphere = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_setSphere).call(Tempo, shape, mergedOptions);\n if (isDefined(shape.parse.mdyLayouts))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_swapLayout).call(Tempo, shape);\n if (isDefined(shape.parse.event))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setEvents).call(Tempo, shape);\n if (isDefined(shape.parse.period))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPeriods).call(Tempo, shape);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPatterns).call(Tempo, shape); // setup Regex DateTime patterns\n }, _Tempo_mdyLocales = function _Tempo_mdyLocales(value) {\n return asArray(value)\n .map(mdy => new Intl.Locale(mdy))\n .map(mdy => ({ locale: mdy.baseName, timeZones: mdy.getTimeZones?.() ?? [] }));\n }, _Tempo_setDiscovery = function _Tempo_setDiscovery(shape, key = shape.config.discovery ?? $Tempo) {\n const sym = isString(key) ? Symbol.for(key) : key;\n const discovery = globalThis[sym];\n if (!isObject(discovery))\n return {};\n // 1. Process TimeZones (normalize to lowercase for lookup)\n const timeZones = discovery.timeZones ?? {};\n for (const [key, value] of Object.entries(timeZones))\n TimeZone[key.toLowerCase()] = value;\n // 2. Process Terms\n if (discovery.terms)\n Tempo.addTerm(...asArray(discovery.terms));\n // 3. Process Formats\n if (discovery.formats)\n shape.config.formats = shape.config.formats.extend(discovery.formats);\n // 4. Process Plugins\n if (discovery.plugins)\n asArray(discovery.plugins).forEach(p => this.extend(p));\n // 4. Process Options\n let opts = discovery.options || {};\n return isFunction(opts) ? opts() : opts;\n }, _Tempo_setPatterns = function _Tempo_setPatterns(shape) {\n const snippet = shape.parse.snippet;\n // if local and no snippet or layout overrides, we can just use the prototype's patterns\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n return;\n // ensure we have our own Map to mutate (shadow if local)\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'pattern'))\n shape.parse.pattern = new Map();\n shape.parse.pattern.clear(); // reset {pattern} Map\n for (const [sym, layout] of ownEntries(shape.parse.layout, true))\n shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet));\n }, Symbol.dispose)]() { Tempo.init(); }\n /**\n * Extends the Tempo class with new functionality.\n * Plugins can add static or instance methods to the library.\n */\n static extend(plugin, options) {\n const p = plugin;\n if (!p.installed) {\n p(options, this, (val) => new this(val));\n p.installed = true;\n }\n return this;\n }\n /** Reads options from persistent storage (e.g., localStorage). */\n static readStore(key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return getStorage(key, {});\n }\n /** Writes configuration into persistent storage. */\n static writeStore(config, key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return setStorage(key, config);\n }\n /** lookup or registers a new `Symbol` for a given key. */\n static getSymbol(key) {\n var _b, _c;\n if (isUndefined(key)) {\n const usr = `usr.${__classPrivateFieldSet(_b = Tempo, _classThis, (_c = __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_usrCount), ++_c), \"f\", _Tempo_usrCount)}`; // allocate a prefixed 'user' key\n return Token[usr] = Symbol(usr); // add to Symbol register\n }\n if (isSymbol(key))\n return key;\n if (isString(key) && key.includes('.')) {\n const description = key.split('.').pop(); // use last segment as description\n return Token[key] ??= Symbol(description);\n }\n return Token[key] ?? Symbol.for(`$Tempo.${key}`);\n }\n /** translates {layout} into an anchored, case-insensitive RegExp. */\n static regexp(layout, snippet) {\n // helper function to replace {name} placeholders with their corresponding snippets\n function matcher(str, depth = 0) {\n if (depth > 12)\n return isRegExp(str) ? str.source : str; // depth guard\n let source = isRegExp(str) ? str.source : str;\n if (isRegExpLike(source)) // string that looks like a RegExp\n source = source.substring(1, source.length - 1); // remove the leading/trailing \"/\"\n if (source.startsWith('^') && source.endsWith('$'))\n source = source.substring(1, source.length - 1); // remove the leading/trailing anchors (^ $)\n return source.replace(Match.braces, (match, name) => {\n const token = Tempo.getSymbol(name); // get the symbol for this {name}\n const customs = snippet?.[token]?.source ?? snippet?.[name]?.source;\n const globals = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[token]?.source ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[name]?.source;\n const layout = Layout[token]; // get resolution source (layout)\n let res = customs ?? globals ?? layout; // get the snippet/layout source\n if (isNullish(res) && name.includes('.')) { // if no definition found, try fallback\n const prefix = name.split('.')[0]; // get the base token name\n const pToken = Tempo.getSymbol(prefix);\n res = snippet?.[pToken]?.source ?? snippet?.[prefix]?.source\n ?? Snippet[pToken]?.source ?? Snippet[prefix]?.source\n ?? Layout[pToken];\n }\n if (res && name.includes('.')) { // wrap dotted extensions for identification\n const safeName = name.replace(/\\./g, '_');\n if (!res.startsWith(`(?<${safeName}>`))\n res = `(?<${safeName}>${res})`;\n }\n return (isNullish(res) || res === match) // if no definition found,\n ? match // return the original match\n : matcher(res, depth + 1); // else recurse to see if snippet contains embedded \"{}\" pairs\n });\n }\n layout = matcher(layout); // initiate the layout-parse\n return new RegExp(`^(${layout})$`, 'i'); // translate the source into a regex\n }\n /** Compares two `Tempo` instances or date-time values. */\n static compare(tempo1, tempo2) {\n const one = new Tempo(tempo1), two = new Tempo(tempo2);\n return Number((one.nano > two.nano) || -(one.nano < two.nano)) + 0;\n }\n /** global Tempo configuration */\n static get config() {\n return getProxy(omit({ ...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config }, 'value'));\n }\n /** global discovery configuration */\n static get discovery() {\n const sym = Symbol.for(this.config.discovery);\n return getProxy(omit({ ...globalThis[sym], scope: 'discovery' }, 'value'));\n }\n /**\n * Returns a snapshot of the configuration layers used by Tempo.\n * Useful for debugging how the final configuration is built.\n */\n static get options() {\n const keyFor = this.config.store ?? Symbol.keyFor($Tempo);\n return {\n default: this.default,\n discovery: this.discovery,\n storage: getProxy(Object.assign({ key: keyFor, scope: 'storage' }, omit(Tempo.readStore(keyFor), 'value'))),\n global: this.config,\n };\n }\n static from(tempo, options) { return new this(tempo, options); }\n static now() { return Temporal.Now.instant().epochNanoseconds; }\n /** static Tempo.terms getter */\n static get terms() {\n return secure(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms)\n .map(({ define, ...rest }) => rest)); // omit the 'define' method\n }\n /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */\n static addTerm(...plugin) {\n asArray(plugin)\n .flat(1)\n .forEach(p => {\n if (!__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).some(t => t.key === p.key)) // check for duplicate key\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).push(p); // append; silently ignore duplicates\n });\n }\n /** static Tempo properties getter */\n static get properties() {\n return secure(getAccessors(Tempo)\n .filter(acc => getType(acc) !== 'Symbol')); // omit any Symbol properties\n }\n /** Tempo initial default settings */\n static get default() {\n return secure({ ...Default, scope: 'default', timeZone: TimeZone });\n }\n /**\n * configuration governing the static 'rules' used when parsing Tempo.DateTime argument\n */\n static get parse() {\n const parse = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse;\n return secure({\n ...parse, // spread primitives like {pivot}\n snippet: { ...parse.snippet }, // spread nested objects\n layout: { ...parse.layout },\n event: { ...parse.event },\n period: { ...parse.period },\n mdyLocales: [...parse.mdyLocales],\n mdyLayouts: [...parse.mdyLayouts],\n });\n }\n /** iterate over Tempo properties */\n static [(_Tempo_conformToGroups = function _Tempo_conformToGroups(tempo) {\n const groups = {};\n if ('year' in tempo) {\n groups.yy = tempo.year.toString().padStart(4, '0');\n groups.mm = tempo.month.toString().padStart(2, '0');\n groups.dd = tempo.day.toString().padStart(2, '0');\n }\n if ('hour' in tempo) {\n groups.hh = tempo.hour.toString().padStart(2, '0');\n groups.mi = tempo.minute.toString().padStart(2, '0');\n groups.ss = tempo.second.toString().padStart(2, '0');\n groups.ff = tempo.nanosecond.toString().padStart(9, '0');\n }\n return groups;\n }, Symbol.iterator)]() {\n return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters'\n }\n // #endregion Static public methods\n // #region Instance symbols~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** allow for auto-convert of Tempo to BigInt, Number or String */\n [Symbol.toPrimitive](hint) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.config, getType(this), '.hint: ', hint);\n switch (hint) {\n case 'string': return this.toString(); // ISO 8601 string\n case 'number': return this.epoch.ms; // Unix epoch (milliseconds)\n default: return this.nano; // Unix epoch (nanoseconds)\n }\n }\n /** iterate over instance formats */\n [Symbol.iterator]() {\n return ownEntries(this.#fmt)[Symbol.iterator](); // instance Iterator over tuple of FormatType[]\n }\n get [Symbol.toStringTag]() {\n return 'Tempo'; // hard-coded to avoid minification mangling\n }\n // #endregion Instance symbols\n // #region Instance properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** constructor tempo */ #tempo;\n /** constructor options */ #options = {};\n /** instantiation Temporal Instant */ #now;\n /** underlying Temporal ZonedDateTime */ #zdt;\n /** temporary anchor used during parsing */ #anchor;\n /** prebuilt formats, for convenience */ #fmt = {};\n /** instance term plugins */ #term = Object.create(null);\n /** instance values to complement static values */ #local = {\n /** instance configuration */ config: {},\n /** instance parse rules (only populated if provided) */ parse: { result: [] }\n };\n constructor(tempo, options = {}) {\n this.#now = Temporal.Now.instant(); // stash current Instant\n [this.#tempo, this.#options] = this.#swap(tempo, options); // swap arguments around, if arg1=Options or Temporal-like\n this.#setLocal(this.#options); // parse the local options looking for overrides to Tempo.#global.config\n // we now have all the info we need to instantiate a new Tempo\n try {\n this.#anchor = this.#options.anchor;\n this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg\n if (['iso8601', 'gregory'].includes(this.#local.config['calendar'])) {\n for (const key of this.#local.config.formats.keys())\n Object.assign(this.#fmt, { [key]: this.format(key) });\n }\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms) // add the plug-in getters for the pre-defined Terms to the instance\n .forEach(({ key, scope, define }) => {\n this.#setTerm(this, key, define, true); // add a getter which returns the key-field only\n this.#setTerm(this, scope, define, false); // add a getter which returns a range-object\n });\n if (isDefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) { // are we mutating with 'set()' ?\n this.#local.parse.result.unshift(...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending)); // prepend collected parse-matches\n __classPrivateFieldSet(Tempo, _classThis, void 0, \"f\", _Tempo_pending); // and reset mutating-flag\n }\n secure(this.#fmt); // prevent mutations\n secure(this.#term); // secure the initial object with getters\n secure(this.#local.config);\n secure(this.#local.parse);\n }\n catch (err) {\n console.error('Tempo Constructor Error:', err);\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.config, `Cannot create Tempo: ${err.message}\\n${err.stack}`);\n return {}; // return empty Object\n }\n }\n // This function has be defined within the Tempo class (and not imported from another module) because it references a private-variable\n /** this will add a getter on the instance #term private field */\n #setTerm(self, name, define, isKeyOnly) {\n if (isDefined(name) && isDefined(define)) {\n Object.defineProperty(self.#term, name, {\n configurable: false,\n enumerable: false,\n get: function () {\n const value = define.call(self, isKeyOnly); // evaluate the term range-lookup\n self.#term = secure(Object.create(self.#term, {\n [name]: {\n value,\n configurable: false,\n writable: false,\n enumerable: true\n }\n }));\n return secure(value);\n }\n });\n }\n }\n // #endregion Constructor\n // #region Instance public accessors~~~~~~~~~~~~~~~~~~~~~~\n /** 4-digit year (e.g., 2024) */ get yy() { return this.toDateTime().year; }\n /** 4-digit ISO week-numbering year */ get wy() { return this.ww === 1 && this.mm === Tempo.MONTH.Dec ? this.yy + 1 : (this.ww >= 52 && this.mm === Tempo.MONTH.Jan ? this.yy - 1 : this.yy); }\n /** Month number: Jan=1, Dec=12 */ get mm() { return this.toDateTime().month; }\n /** ISO week number of the year */ get ww() { return this.toDateTime().weekOfYear; }\n /** Day of the month (1-31) */ get dd() { return this.toDateTime().day; }\n /** Day of the month (alias for `dd`) */ get day() { return this.toDateTime().day; }\n /** Hour of the day (0-23) */ get hh() { return this.toDateTime().hour; }\n /** Minutes of the hour (0-59) */ get mi() { return this.toDateTime().minute; }\n /** Seconds of the minute (0-59) */ get ss() { return this.toDateTime().second; }\n /** Milliseconds of the second (0-999) */ get ms() { return this.toDateTime().millisecond; }\n /** Microseconds of the millisecond (0-999) */ get us() { return this.toDateTime().microsecond; }\n /** Nanoseconds of the microsecond (0-999) */ get ns() { return this.toDateTime().nanosecond; }\n /** Fractional seconds (e.g., 0.123456789) */ get ff() { return +(`0.${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`); }\n /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz() { return this.toDateTime().timeZoneId; }\n /** Unix timestamp (defaults to milliseconds) */ get ts() { return this.epoch[this.#local.config.timeStamp]; }\n /** Short month name (e.g., 'Jan') */ get mmm() { return Tempo.MONTH.keyOf(this.#zdt.month); }\n /** Full month name (e.g., 'January') */ get mon() { return Tempo.MONTHS.keyOf(this.#zdt.month); }\n /** Short weekday name (e.g., 'Mon') */ get www() { return Tempo.WEEKDAY.keyOf(this.#zdt.dayOfWeek); }\n /** Full weekday name (e.g., 'Monday') */ get wkd() { return Tempo.WEEKDAYS.keyOf(this.toDateTime().dayOfWeek); }\n /** ISO weekday number: Mon=1, Sun=7 */ get dow() { return this.toDateTime().dayOfWeek; }\n /** Nanoseconds since Unix epoch (BigInt) */ get nano() { return this.toDateTime().epochNanoseconds; }\n /** current Tempo configuration */\n get config() {\n return getProxy(omit({ ...this.#local.config }, 'scope', 'value', 'anchor'));\n }\n /** Instance-specific parse rules (merged with global) */ get parse() { return this.#local.parse; }\n /** Object containing results from all term plugins */ get term() { return getProxy(this.#term); }\n /** Formatted results for all pre-defined format codes */ get fmt() { return this.#fmt; }\n /** units since epoch */ get epoch() {\n return secure({\n /** seconds since epoch */ ss: Math.trunc(this.toDateTime().epochMilliseconds / 1_000),\n /** milliseconds since epoch */ ms: this.toDateTime().epochMilliseconds,\n /** microseconds since epoch */ us: Number(this.toDateTime().epochNanoseconds / BigInt(1_000)),\n /** nanoseconds since epoch */ ns: this.toDateTime().epochNanoseconds,\n });\n }\n // #endregion Instance public accessors\n // #region Instance private accessors\n /**\n * @Immutable class decorators wrap the class but leave internal lexical bindings pointing to the original, undecorated class.\n * To ensure new instances returned by instance methods are properly frozen,\n * we must instantiate internally from the decorated wrapper (which is bound to `this.constructor`)\n * rather than using `new Tempo(..)`.\n */\n get #Tempo() { return this.constructor; }\n /** time duration until another date-time */ until(optsOrDate, optsOrUntil) { return this.#until(optsOrDate, optsOrUntil); }\n /** time elapsed since another date-time */ since(optsOrDate, optsOrUntil) { return this.#since(optsOrDate, optsOrUntil); }\n /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt) { return this.#format(fmt); }\n /** returns a new `Tempo` with specific duration added. */ add(tempo, options) { return this.#add(tempo, options); }\n /** returns a new `Tempo` with specific offsets. */ set(tempo, options) { return this.#set(tempo, options); }\n /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config); }\n /** returns the underlying Temporal.ZonedDateTime */ toDateTime() { return this.#zdt ?? this.#anchor ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone); }\n /** returns a Temporal.PlainDate representation */ toPlainDate() { return this.toDateTime().toPlainDate(); }\n /** returns a Temporal.PlainTime representation */ toPlainTime() { return this.toDateTime().toPlainTime(); }\n /** returns a Temporal.PlainDateTime representation */ toPlainDateTime() { return this.toDateTime().toPlainDateTime(); }\n /** returns the underlying Temporal.Instant */ toInstant() { return this.toDateTime().toInstant(); }\n /** the date-time as a standard `Date` object. */ toDate() { return new Date(this.toDateTime().round({ smallestUnit: enums.ELEMENT.ms }).epochMilliseconds); }\n /** the ISO8601 string representation of the date-time. */ toString() { return this.toPlainDateTime().toString({ calendarName: 'never' }); }\n /** Custom JSON serialization for `JSON.stringify`. */ toJSON() { return omit({ ...this.#local.config, value: this.toString() }, 'scope', 'store'); }\n /** `true` if the underlying date-time is valid. */ isValid() { return !isEmpty(this); }\n // #endregion Instance public methods\n // #region Instance private methods~~~~~~~~~~~~~~~~~~~~~~~\n /** setup local 'config' and 'parse' rules (prototype-linked to global) */\n #setLocal(options) {\n // setup local config (prototype-linked to global config)\n this.#local.config = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n Object.assign(this.#local.config, { scope: 'local' });\n // setup local parse rules (prototype-linked to global parse)\n this.#local.parse = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse);\n this.#local.parse.result = [];\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, this.#local, options); // set #local config\n }\n /** parse DateTime input */\n #parse(tempo, dateTime) {\n const today = (dateTime ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone))\n .withTimeZone(this.#local.config.timeZone);\n const { type, value } = this.#conform(tempo, today, isDefined(dateTime));\n // evaluate latest timezone / calendar (after #conform which might have updated them)\n const { timeZone, calendar } = this.#local.config;\n const tz = isString(timeZone) ? timeZone : timeZone.id ?? timeZone.timeZoneId;\n const cal = isString(calendar) ? calendar : calendar.id ?? calendar.calendarId;\n if (isEmpty(this.#local.parse.result) && isUndefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) // #conform() didn't find any matches\n this.#local.parse.result = [{ type, value }];\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'parse', `{type: ${type}, value: ${value}}`); // show what we're parsing\n switch (type) {\n case 'Null':\n case 'Void':\n case 'Empty':\n case 'Undefined':\n return today;\n case 'String': // String which didn't conform to a Tempo.pattern\n try {\n const str = value.replace(/Z$/, ''); // requested Z-stripping for adoption\n const zdt = Temporal.ZonedDateTime.from(str.includes('[') ? str : `${str}[${tz}]`);\n if (this.#local)\n this.#local.config.timeZone = zdt.timeZoneId;\n return zdt;\n }\n catch (err) { // else see if Date.parse can parse value\n this.#result({ type: 'String', value }, { match: 'Date.parse' });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, 'Cannot detect DateTime; fallback to Date.parse');\n if (Match.date.test(value)) {\n try {\n return Temporal.PlainDate.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback */ }\n }\n try {\n return Temporal.PlainDateTime.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback to Date.parse */ }\n const date = new Date(value.toString());\n if (isNaN(date.getTime()))\n return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot parse Date: \"${value}\"`);\n return Temporal.ZonedDateTime // adopt instance timezone\n .from(`${date.toISOString().substring(0, 23)}[${tz}]`)\n .withCalendar(cal);\n }\n case 'Temporal.ZonedDateTime': // ZonedDateTime object: convert to instance timezone\n return (value.timeZoneId === tz && value.calendarId === cal)\n ? value\n : value.withTimeZone(tz).withCalendar(cal);\n case 'Temporal.PlainDate':\n case 'Temporal.PlainDateTime':\n return value\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainTime':\n return today.withPlainTime(value);\n case 'Temporal.PlainYearMonth': // assume current day, else end-of-month\n return value\n .toPlainDate({ day: Math.min(today.day, value.daysInMonth) })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainMonthDay': // assume current year\n return value\n .toPlainDate({ year: today.year })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.Instant':\n return value\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Tempo':\n return value\n .toDateTime()\n .withTimeZone(tz)\n .withCalendar(cal); // apply instance timezone to cloned Tempo\n case 'Date':\n return Temporal.Instant.fromEpochMilliseconds(value.getTime())\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Number': // Number which didn't conform to a Tempo.pattern\n const [seconds = BigInt(0), suffix = BigInt(0)] = value.toString().split('.').map(BigInt);\n const nano = BigInt(suffix.toString().substring(0, 9).padEnd(9, '0'));\n return Temporal.Instant.fromEpochNanoseconds(seconds * BigInt(1_000_000_000) + nano)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'BigInt': // BigInt is not conformed against a Tempo.pattern\n return Temporal.Instant.fromEpochNanoseconds(value)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected Tempo parameter type: ${type}, ${String(value)}`);\n return today;\n }\n }\n /** resolve constructor / method arguments */\n #swap(tempo, options = {}) {\n return this.#isOptions(tempo)\n ? [tempo.value, { ...tempo }]\n : [tempo, { ...options }];\n }\n /** check if we've been given a Tempo Options object */\n #isOptions(arg) {\n if (!isObject(arg) || arg.constructor !== Object)\n return false;\n const keys = ownKeys(arg); // if it contains any 'mutation' keys, then it's not (just) an options object\n if (keys.some(key => enums.MUTATION.has(key)))\n return false;\n return keys\n .some(key => enums.OPTION.has(key));\n }\n /** check if we've been given a ZonedDateTimeLike object */\n #isZonedDateTimeLike(tempo) {\n if (!isObject(tempo) || isEmpty(tempo))\n return false;\n // if it contains any 'options' keys, it's not a ZonedDateTime\n const keys = ownKeys(tempo);\n if (keys.some(key => enums.OPTION.has(key) && key !== 'value'))\n return false;\n // we include {value} to allow for Tempo instances\n return keys\n .filter(isString)\n .every((key) => enums.ZONED_DATE_TIME.has(key));\n }\n #result(...rest) {\n const match = Object.assign({}, ...rest); // collect all object arguments\n if (!isEmpty(match.groups)) {\n if (isDefined(this.#anchor) && !match.isAnchored)\n match.isAnchored = true;\n (__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending) ?? this.#local.parse.result).push(match);\n }\n }\n /** evaluate 'string | number' input against known patterns */\n #conform(tempo, dateTime, isAnchored = false) {\n const arg = asType(tempo);\n const { type, value } = arg;\n if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property)\n const { timeZone, calendar, value, ...options } = tempo;\n let zdt = !isEmpty(options)\n ? dateTime.with({ ...options })\n : dateTime;\n if (timeZone)\n zdt = zdt.withTimeZone(timeZone); // optionally set timeZone\n if (calendar)\n zdt = zdt.withCalendar(calendar); // optionally set calendar\n this.#result({ type: 'Temporal.ZonedDateTimeLike', value: zdt, match: 'Temporal.ZonedDateTimeLike' });\n return Object.assign(arg, {\n type: 'Temporal.ZonedDateTime', // override {arg.type}\n value: zdt,\n });\n }\n if (type !== 'String' && type !== 'Number') {\n this.#result(arg, { match: type });\n return arg;\n }\n if (isFunction(value)) {\n const res = value.call(this);\n return this.#conform(res, dateTime, isAnchored);\n }\n const trim = trimAll(value);\n if (type === 'String') { // if original value is String\n if (isEmpty(trim)) { // don't conform empty string\n this.#result(arg, { match: 'Empty' });\n return Object.assign(arg, { type: 'Empty' });\n }\n if (isIntegerLike(trim)) { // if string representation of BigInt literal\n this.#result(arg, { match: 'BigInt' });\n return Object.assign(arg, { type: 'BigInt', value: asInteger(trim) });\n }\n }\n else { // else it is a Number\n if (trim.length <= 7) { // cannot reliably interpret small numbers: might be {ss} or {yymmdd} or {dmmyyyy}\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, 'Cannot safely interpret number with less than 8-digits: use string instead');\n return arg;\n }\n }\n // const isSimpleIsoOrNumeric = typeof value === 'string' && (Match.date.test(value) || /^\\d+$/.test(value));\n const map = this.#local.parse.pattern;\n for (const [sym, pat] of map) {\n const groups = this.#parseMatch(pat, trim); // determine pattern-match groups\n if (isEmpty(groups))\n continue; // no match, so skip this iteration\n this.#result(arg, { match: sym.description, groups: cleanify(groups) }); // stash the {key} of the pattern that was matched\n dateTime = this.#parseZone(groups, dateTime); // resolve timezone early so events can use it\n dateTime = this.#parseGroups(groups, dateTime); // mutate the {groups} object (resolves events/periods)\n dateTime = this.#parseWeekday(groups, dateTime); // if {weekDay} pattern, calculate a calendar value\n dateTime = this.#parseDate(groups, dateTime); // if {calendar}|{event} pattern, translate to date value\n dateTime = this.#parseTime(groups, dateTime); // if {clock}|{period} pattern, translate to a time value\n /**\n * finished analyzing a matched pattern.\n * rebuild {arg.value} into a ZonedDateTime\n */\n // if no time-components were matched, strip time to midnight baseline\n if (!isAnchored && !['hh', 'mi', 'ss', 'ff', 'mer', 'per'].some(key => isDefined(groups[key])))\n dateTime = dateTime.withPlainTime('00:00:00');\n Object.assign(arg, { type: 'Temporal.ZonedDateTime', value: dateTime });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'groups', groups); // show the resolved date-time elements\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'pattern', sym.description); // show the pattern that was matched\n break; // stop checking patterns\n }\n return arg;\n }\n /** apply a regex-match against a value, and clean the result */\n #parseMatch(pat, value) {\n const groups = value.toString().match(pat)?.groups || {};\n ownEntries(groups) // remove undefined, NaN, null and empty values\n .forEach(([key, val]) => isEmpty(val) && delete groups[key]);\n return groups;\n }\n /** resolve {event} | {period} to their date | time values (mutates groups) */\n #parseGroups(groups, dateTime) {\n this.#anchor = dateTime; // temporarily anchor the instance so events resolve relative to current state\n try {\n for (const key of ownKeys(groups)) {\n const isEvent = Match.event.test(key);\n const isPeriod = Match.period.test(key);\n if (!isEvent && !isPeriod)\n continue;\n const idx = +key.substring(4);\n const src = key.startsWith('g') ? (isEvent ? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.event : __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.period) : (isEvent ? this.#local.parse.event : this.#local.parse.period);\n const entry = ownEntries(src, true)[idx];\n if (!entry)\n continue;\n const definition = entry[1];\n const res = isFunction(definition) ? definition.call(this).toString() : definition;\n const resGroups = isEvent ? this.#parseEvent(res) : this.#parsePeriod(res);\n Object.assign(groups, resGroups);\n delete groups[key];\n }\n }\n finally {\n this.#anchor = void 0; // reset anchor\n }\n // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date)\n if (isDefined(groups[\"mm\"]) && !isNumeric(groups[\"mm\"])) {\n const mm = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, groups[\"mm\"]); // conform month-name\n groups[\"mm\"] = Tempo.MONTH.keys().findIndex((el) => el === mm).toString().padStart(2, '0');\n }\n // Apply mutated groups to dateTime\n if (isDefined(groups.yy) || isDefined(groups.mm) || isDefined(groups.dd))\n dateTime = this.#parseDate(groups, dateTime);\n if (isDefined(groups.hh) || isDefined(groups.mi) || isDefined(groups.ss) || isDefined(groups.ff) || isDefined(groups.mer))\n dateTime = this.#parseTime(groups, dateTime);\n return dateTime;\n }\n /**\n * We expect similar offset-logic to apply to 'modifiers' when parsing a string DateTime.\n * returns {adjust} to make, based on {modifier}, {offset}, and {period}\n * -\t\t\tprevious period\n * +\t\t\tnext period\n * -3\t\t\tthree periods ago\n * <\t\t\tprior to base-date (asIs)\n * <=\t\t\tprior to base-date (plus one)\n */\n #parseModifier({ mod, adjust, offset, period }) {\n adjust = Math.abs(adjust);\n switch (mod) {\n case void 0: // no adjustment\n case '=':\n case 'this': // current period\n return 0;\n case '+': // next period\n case 'next':\n return adjust;\n case '-': // previous period\n case 'prev':\n case 'last':\n return -adjust;\n case '<': // period before base-date\n case 'ago':\n return (period <= offset)\n ? -adjust\n : -(adjust - 1);\n case '<=': // period before or including base-date\n return (period < offset)\n ? -adjust\n : -(adjust - 1);\n case '>': // period after base-date\n case 'hence':\n return (period > offset)\n ? adjust\n : (adjust - 1);\n case '>=': // period after or including base-date\n case '+=':\n return (period >= offset)\n ? adjust\n : (adjust - 1);\n default: // unexpected modifier\n return 0;\n }\n }\n /**\n * if named-group 'wkd' detected (with optional 'mod', 'nbr', 'sfx' or time-units), then calc relative weekday offset\n * | Example | Result | Note |\n * | :--- | :---- | :---- |\n * | `Wed` | Wed this week | might be earlier or later or equal to current day |\n * | `-Wed` | Wed last week | same as new Tempo('Wed').add({ weeks: -1 }) |\n * | `+Wed` | Wed next week | same as new Tempo('Wed').add({ weeks: 1 }) |\n * | `-3Wed` | Wed three weeks ago | same as new Tempo('Wed').add({ weeks: -3 }) |\n * | `', hh: '10', mer: 'pm'}\n * we early-exit if we find anything other than time-units\n */\n const time = ['hh', 'mi', 'ss', 'ms', 'us', 'ns', 'ff', 'mer'];\n if (!ownKeys(rest)\n .every(key => time.includes(key))) // non 'time-unit' keys detected\n return dateTime; // this is not a true {weekDay} pattern, so early-exit\n if (!isEmpty(mod) && !isEmpty(sfx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${sfx}'`);\n return dateTime; // cannot provide both 'modifier' and 'suffix'\n }\n const weekday = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, wkd); // conform weekday-name\n const adjust = +nbr; // how many weeks to adjust\n const offset = Tempo.WEEKDAY.keys() // how far weekday is from today\n .findIndex((el) => el === weekday);\n const days = offset - dateTime.dayOfWeek // number of days to offset from dateTime\n + (this.#parseModifier({ mod: mod ?? sfx, adjust, offset, period: dateTime.dayOfWeek }) * dateTime.daysInWeek);\n delete groups[\"wkd\"];\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"sfx\"];\n return dateTime\n .add({ days }); // set new {day}\n }\n /**\n * match input against date patterns\n * @returns adjusted ZonedDateTime with resolved time-components\n */\n #parseDate(groups, dateTime) {\n const { mod, nbr = '1', afx, unt, yy, mm, dd } = groups;\n if (isEmpty(yy) && isEmpty(mm) && isEmpty(dd) && isUndefined(unt))\n return dateTime; // return default\n if (!isEmpty(mod) && !isEmpty(afx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${afx}'`);\n return dateTime;\n }\n let { year, month, day } = this.#num({\n year: yy ?? dateTime.year, // supplied year, else current year\n month: mm ?? dateTime.month, // supplied month, else current month\n day: dd ?? dateTime.day, // supplied day, else current day\n });\n // handle {unt} relative offset (e.g. '2 days ago')\n if (unt) {\n const adjust = +nbr;\n const direction = (mod === '<' || mod === '-' || afx === 'ago') ? -1 : 1;\n const plural = singular(unt) + 's';\n dateTime = dateTime.add({ [plural]: adjust * direction });\n delete groups[\"unt\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n delete groups[\"mod\"];\n return dateTime;\n }\n // convert 2-digit year to 4-digits using 'pivot-year' (relative to current century)\n if (year.toString().match(Match.twoDigit)) { // if {year} match just-two digits\n const pivot = dateTime\n .subtract({ years: this.#local.parse[\"pivot\"] }) // pivot cutoff to determine century\n .year % 100; // remainder \n const century = Math.trunc(dateTime.year / 100); // current century\n year += (century - Number(year >= pivot)) * 100; // now a four-digit year\n }\n // adjust the {year} if a Modifier is present\n const adjust = +nbr; // how many years to adjust\n const offset = Number(pad(month) + '.' + pad(day)); // the event month.day\n const period = Number(pad(dateTime.month) + '.' + pad(dateTime.day + 1));\n year += this.#parseModifier({ mod: mod ?? afx, adjust, offset, period });\n Object.assign(groups, { yy: year, mm: month, dd: day });\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n // all date-components are now set; check for overflow in case past end-of-month\n return Temporal.PlainDate.from({ year, month, day }, { overflow: 'constrain' })\n .toZonedDateTime(dateTime.timeZoneId) // adjust to constrained date\n .withPlainTime(dateTime.toPlainTime()); // restore the time\n }\n /** match input against 'tm' pattern (returns adjusted ZonedDateTime) */\n #parseTime(groups = {}, dateTime) {\n if (isUndefined(groups[\"hh\"])) // must contain 'time' with at least {hh}\n return dateTime;\n let { hh = 0, mi = 0, ss = 0, ms = 0, us = 0, ns = 0 } = this.#num(groups);\n if (hh >= 24) {\n dateTime = dateTime.add({ days: Math.trunc(hh / 24) }); // move the date forward number of days to offset\t\t\t\t\t\t\t\t\n hh %= 24; // midnight is '00:00' on the next-day\n }\n if (isDefined(groups[\"ff\"])) { // {ff} is fractional seconds and overrides {ms|us|ns}\n const ff = groups[\"ff\"].substring(0, 9).padEnd(9, '0');\n ms = +ff.substring(0, 3);\n us = +ff.substring(3, 6);\n ns = +ff.substring(6, 9);\n }\n if (groups[\"mer\"]?.toLowerCase() === 'pm' && hh < 12 && (hh + mi + ss + ms + us + ns) > 0)\n hh += 12; // anything after midnight and before midday\n if (groups[\"mer\"]?.toLowerCase() === 'am' && hh >= 12)\n hh -= 12; // anything after midday\n return dateTime // return the computed time-values\n .withPlainTime({ hour: hh, minute: mi, second: ss, millisecond: ms, microsecond: us, nanosecond: ns });\n }\n /**\n * apply a timezone or calendar bracket to the current ZonedDateTime\n * normalization is applied to ensure 'Z' is treated as 'UTC'\n */\n #parseZone(groups, dateTime) {\n const tzd = groups[\"tzd\"]?.replace(Match.zed, 'UTC'); // normalize timezone/offset\n const brk = groups[\"brk\"]?.replace(Match.zed, 'UTC'); // handle bracketed timezone\n const zone = brk || tzd;\n if (zone && zone !== dateTime.timeZoneId && !zone.startsWith('u-ca=')) {\n if (this.#local)\n this.#local.config.timeZone = zone; // update local config if exists\n dateTime = dateTime.toPlainDateTime().toZonedDateTime(zone); // adopt timezone override (stable)\n }\n const cal = groups[\"cal\"];\n if (cal && cal !== dateTime.calendarId) {\n const calendar = cal.startsWith('u-ca=') ? cal.substring(5) : cal;\n this.#local.config.calendar = calendar;\n dateTime = dateTime.withCalendar(calendar);\n }\n delete groups[\"brk\"];\n delete groups[\"cal\"];\n delete groups[\"tzd\"];\n return dateTime;\n }\n /** match an {event} string against a date pattern */\n #parseEvent(evt) {\n const groups = {};\n const pats = this.#local.parse.isMonthDay // first find out if we have a US-format timeZone\n ? ['mdy', 'dmy', 'ymd'] // if so, try {mdy} before {dmy}\n : ['dmy', 'mdy', 'ymd']; // else try {dmy} before {mdy}\n for (const pat of pats) {\n const reg = this.#getPattern(pat);\n if (isDefined(reg)) {\n const match = this.#parseMatch(reg, evt);\n if (!isEmpty(match)) {\n this.#result({ type: 'Event', value: evt, match: pat, groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n if (!isEmpty(groups))\n break; // return on the first matched pattern\n }\n return groups; // overlay the match date-components\n }\n /** match a {period} string against the time pattern */\n #parsePeriod(per) {\n const groups = {};\n const tm = this.#getPattern('tm'); // get the RegExp for the time-pattern\n if (isDefined(tm)) {\n const match = this.#parseMatch(tm, per);\n if (!isEmpty(match)) {\n this.#result({ type: 'Period', value: per, match: 'tm', groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n return groups;\n }\n /** lookup the RegExp for a given pattern name */\n #getPattern(pat) {\n const reg = this.#local.parse.pattern.get(Tempo.getSymbol(pat));\n if (isUndefined(reg))\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot find pattern: \"${pat}\"`);\n return reg;\n }\n /** return a new object, with only numeric values */\n #num = (groups) => {\n return ownEntries(groups)\n .reduce((acc, [key, val]) => {\n if (isNumeric(val))\n acc[key] = asNumber(val);\n return acc;\n }, {});\n };\n /** mutate the date-time by adding a duration */\n #add = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n const mutate = 'add';\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [unit, offset]) => {\n if (unit === 'timeZone' || unit === 'calendar')\n return zdt;\n const single = singular(unit);\n const plural = single + 's';\n switch (`${mutate}.${single}`) {\n case 'add.year':\n case 'add.month':\n case 'add.week':\n case 'add.day':\n case 'add.hour':\n case 'add.minute':\n case 'add.second':\n case 'add.millisecond':\n case 'add.microsecond':\n case 'add.nanosecond':\n return zdt\n .add({ [plural]: offset });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`);\n return zdt;\n }\n }, zdt);\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n /** mutate the date-time by setting specific offsets */\n #set = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n if (args.timeZone)\n overrides.timeZone = args.timeZone;\n if (args.calendar)\n overrides.calendar = args.calendar;\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [key, adjust]) => {\n if (key === 'timeZone' || key === 'calendar')\n return zdt;\n const { mutate, offset, single } = ((key) => {\n switch (key) {\n case 'start':\n case 'mid':\n case 'end':\n return { mutate: key, offset: 0, single: singular(adjust?.toString() ?? '') };\n default:\n return { mutate: 'set', offset: adjust, single: singular(key) };\n }\n })(key); // IIFE to analyze arguments\n switch (`${mutate}.${single}`) {\n case 'set.timeZone':\n return zdt.withTimeZone(offset);\n case 'set.calendar':\n return zdt.withCalendar(offset);\n case 'set.period':\n case 'set.time':\n case 'set.date':\n case 'set.event':\n case 'set.dow': // set day-of-week by number\n case 'set.wkd': // set day-of-week by name\n return this.#parse(offset, zdt);\n case 'set.year':\n case 'set.month':\n // case 'set.week':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.day':\n case 'set.hour':\n case 'set.minute':\n case 'set.second':\n case 'set.millisecond':\n case 'set.microsecond':\n case 'set.nanosecond':\n return zdt\n .with({ [single]: offset });\n case 'set.yy':\n case 'set.mm':\n // case 'set.ww':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.dd':\n case 'set.hh':\n case 'set.mi':\n case 'set.ss':\n case 'set.ms':\n case 'set.us':\n case 'set.ns':\n const value = Tempo.ELEMENT[single];\n return zdt\n .with({ [value]: offset });\n case 'start.year':\n return zdt\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay();\n case 'start.term': // TODO\n return zdt;\n case 'start.month':\n return zdt\n .with({ day: 1 })\n .startOfDay();\n case 'start.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) })\n .startOfDay();\n case 'start.day':\n return zdt\n .startOfDay();\n case 'start.hour':\n case 'start.minute':\n case 'start.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'trunc' });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'mid.year':\n return zdt\n .with({ month: Tempo.MONTH.Jul, day: 1 })\n .startOfDay();\n case 'mid.term': // TODO: relevant?\n return zdt;\n case 'mid.month':\n return zdt\n .with({ day: Math.trunc(zdt.daysInMonth / 2) })\n .startOfDay();\n case 'mid.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) })\n .startOfDay();\n case 'mid.day':\n return zdt\n .round({ smallestUnit: 'day', roundingMode: 'trunc' })\n .add({ hours: 12 });\n case 'mid.hour':\n return zdt\n .round({ smallestUnit: 'hour', roundingMode: 'trunc' })\n .add({ minutes: 30 });\n case 'mid.minute':\n return zdt\n .round({ smallestUnit: 'minute', roundingMode: 'trunc' })\n .add({ seconds: 30 });\n case 'mid.second':\n return zdt\n .round({ smallestUnit: 'second', roundingMode: 'trunc' })\n .add({ milliseconds: 500 });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'end.year':\n return zdt\n .add({ years: 1 })\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.term': // TODO\n return zdt\n .subtract({ nanoseconds: 1 });\n case 'end.month':\n return zdt\n .add({ months: 1 })\n .with({ day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.week':\n return zdt\n .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.day':\n case 'end.hour':\n case 'end.minute':\n case 'end.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'ceil' })\n .subtract({ nanoseconds: 1 });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`);\n return zdt;\n }\n }, zdt); // start reduce with the shifted zonedDateTime\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n #format = (fmt) => {\n if (isNull(this.#tempo))\n return undefined; // don't format dates\n const obj = this.#local.config.formats;\n let template = (isString(fmt) && obj.has(fmt))\n ? obj[fmt]\n : String(fmt);\n // auto-meridiem: if {HH} is present and {mer} is absent, append it after the last time component\n if (template.includes('{HH}') && !template.includes('{mer}') && !template.includes('{MER}')) {\n const index = Math.max(template.lastIndexOf('{HH}'), template.lastIndexOf('{mi}'), template.lastIndexOf('{ss}'));\n if (index !== -1) {\n const end = template.indexOf('}', index) + 1;\n template = template.slice(0, end) + '{mer}' + template.slice(end);\n }\n }\n const result = template.replace(Match.braces, (_match, token) => {\n switch (token) {\n case 'wy': return pad(this.wy, 4);\n case 'yyww': return pad(this.wy, 4) + pad(this.ww);\n case 'yyyy': return pad(this.yy, 4);\n case 'yy': return pad(this.yy % 100);\n case 'mon': return this.mon;\n case 'mmm': return this.mmm;\n case 'mm': return pad(this.mm);\n case 'dd': return pad(this.dd);\n case 'day': return this.day.toString();\n case 'dow': return this.dow.toString();\n case 'wkd': return this.wkd;\n case 'www': return this.www;\n case 'ww': return pad(this.ww);\n case 'hh': return pad(this.hh);\n case 'HH': return pad(this.hh > 12 ? this.hh % 12 : this.hh || 12);\n case 'mer': return this.hh >= 12 ? 'pm' : 'am';\n case 'MER': return this.hh >= 12 ? 'PM' : 'AM';\n case 'mi': return pad(this.mi);\n case 'ss': return pad(this.ss);\n case 'ms': return pad(this.ms, 3);\n case 'us': return pad(this.us, 3);\n case 'ns': return pad(this.ns, 3);\n case 'ff': return `${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`;\n case 'hhmiss': return `${pad(this.hh)}${pad(this.mi)}${pad(this.ss)}`;\n case 'ts': return this.ts.toString();\n case 'nano': return this.nano.toString();\n case 'tz': return this.tz;\n default: {\n return token.startsWith('term.')\n ? stringify(this.term[token.slice(5)])\n : `{${token}}`; // unknown format-code, return as-is\n }\n }\n });\n const isExplicitlyNumeric = ['{yyyy}{ww}', '{yyyy}{mm}', '{yyyy}{mm}{dd}', '{yyww}', '{wy}{ww}', '{wy}'].includes(template);\n return (isExplicitlyNumeric ? ifNumeric(result) : result);\n };\n #until(arg, until = {}, since = false) {\n let value, opts = {}, unit;\n switch (true) {\n case isString(arg) && Tempo.ELEMENT.includes(singular(arg)):\n unit = arg; // e.g. tempo.until('hours')\n ({ value, ...opts } = until);\n break;\n case isString(arg): // assume 'arg' is a dateTime string\n value = arg; // e.g. tempo.until('20-May-1957', {unit: 'years'})\n if (isObject(until))\n ({ unit, ...opts } = until);\n else\n unit = until; // assume the 'until' arg is a 'unit' string\n break;\n case isObject(arg) && isString(until): // assume 'until' is a Unit\n unit = until; // e.g. tempo.until({value:'20-May-1957}, 'years'})\n ({ value, ...opts } = arg);\n break;\n case isObject(arg) && isObject(until): // assume combination of Tempo.Options and Tempo.Until\n ({ value, unit, ...opts } = Object.assign({}, arg, until));\n break;\n case isString(until):\n unit = until;\n value = arg;\n break;\n case isObject(until):\n unit = until.unit;\n value = arg;\n break;\n default:\n value = arg; // assume 'arg' is a DateTime\n }\n const offset = new this.#Tempo(value, opts); // create the offset Tempo\n const diffZone = this.#zdt.timeZoneId !== offset.#zdt.timeZoneId;\n // Temporal restricts cross-timezone math to absolute units ('hours') to avoid DST ambiguity\n const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') });\n if (isDefined(unit))\n unit = `${singular(unit)}s`; // coerce to plural\n return (isUndefined(unit) || since) // if no 'unit' provided, or if called via #since()\n ? getAccessors(duration) // return an Object with all the duration accessors\n .reduce((acc, dur) => Object.assign(acc, { [dur]: duration[dur] }), ifDefined({ iso: duration.toString(), unit }))\n : duration.total({ relativeTo: this.#zdt, unit }); // sum-up the duration components\n }\n /** format the elapsed time between two Tempos (to nanosecond) */\n #since(arg, until = {}) {\n const dur = this.#until(arg, until, true); // get a Tempo.Duration object\n const date = [dur.years, dur.months, dur.days];\n const time = [dur.hours, dur.minutes, dur.seconds];\n const fraction = [dur.milliseconds, dur.microseconds, dur.nanoseconds]\n .map(Math.abs)\n .map(nbr => nbr.toString().padStart(3, '0'))\n .join('');\n const rtf = new Intl.RelativeTimeFormat(this.#local.config['locale'], { style: 'narrow' });\n switch (dur.unit) {\n case 'years':\n return rtf.format(date[0], 'years');\n case 'months':\n return rtf.format(date[1], 'months');\n case 'weeks':\n return rtf.format(date[1], 'weeks');\n case 'days':\n return rtf.format(date[2], 'days');\n case 'hours':\n return rtf.format(time[0], 'hours');\n case 'minutes':\n return rtf.format(time[1], 'minutes');\n case 'seconds':\n return rtf.format(time[2], 'seconds');\n case 'milliseconds':\n case 'microseconds':\n case 'nanoseconds':\n return `${fraction}`;\n default:\n return dur.iso;\n }\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Tempo = _classThis;\n})();\nexport { Tempo };\n// #endregion Namespace\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nTempo.init(); // initialize default global configuration\n// shortcut functions to common Tempo properties / methods\n/** check valid Tempo */ export const isTempo = (tempo) => isType(tempo, 'Tempo');\n/** current timestamp (ts) */ export const getStamp = ((tempo, options) => new Tempo(tempo, options).ts);\n/** create new Tempo */ export const getTempo = ((tempo, options) => new Tempo(tempo, options));\n/** format a Tempo */ export const fmtTempo = ((fmt, tempo, options) => new Tempo(tempo, options).format(fmt));\n//# sourceMappingURL=tempo.class.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport { Logify } from '#core/shared/logify.class.js';\nimport { asArray } from '#core/shared/coercion.library.js';\nimport { sprintf } from '#core/shared/string.library.js';\nimport { ifDefined } from '#core/shared/object.library.js';\nimport { secure } from '#core/shared/utility.library.js';\nimport { cleanify } from '#core/shared/serialize.library.js';\nimport { Immutable } from '#core/shared/class.library.js';\nimport { isEmpty, isObject } from '#core/shared/type.library.js';\n/**\n * Wrap a Promise's resolve/reject/finally methods for later fulfilment.\n * with useful methods for tracking the state of the Promise, chaining fulfilment, etc.\n ```\n new Pledge({tag: string, onResolve?: () => void, onReject?: () => void, onSettle?: () => void})\n new Pledge(tag?: string)\n ```\n */\nlet Pledge = (() => {\n var _Pledge_static;\n let _classDecorators = [Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Pledge = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Pledge\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Pledge = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n #pledge;\n #status = {};\n #dbg;\n static {\n _Pledge_static = { value: {} };\n }\n static STATE = secure({\n Pending: Symbol('pending'),\n Resolved: Symbol('resolved'),\n Rejected: Symbol('rejected')\n });\n /** initialize future Pledge instances */\n static init(arg) {\n if (isObject(arg)) {\n if (isEmpty(arg))\n __classPrivateFieldSet(Pledge, _classThis, {}, \"f\", _Pledge_static); // reset static values\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }), ifDefined({ onResolve: arg.onResolve, onReject: arg.onReject, onSettle: arg.onSettle, }));\n }\n else {\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg, }));\n }\n if (__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug)\n console.log('Pledge: ', __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static)); // debug\n return Pledge.status;\n }\n /** reset static defaults */\n static [Symbol.dispose]() { Pledge.init({}); }\n static get status() {\n return __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static);\n }\n /** use catch:boolean to determine whether to throw or return */\n #catch(...msg) {\n if (this.status.catch) {\n this.#dbg.warn(...msg); // catch, but warn {error}\n return;\n }\n this.#dbg.error(...msg); // assume {error}\n throw new Error(sprintf('pledge: ', ...msg));\n }\n constructor(arg) {\n this.#pledge = Promise.withResolvers();\n this.#status = { state: Pledge.STATE.Pending, ...__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static) };\n if (isObject(arg)) {\n this.#dbg = new Logify({ debug: arg.debug, catch: arg.catch });\n Object.assign(this.#status, ifDefined({ tag: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, debug: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug, catch: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).catch }), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }));\n const onResolve = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onResolve).concat(asArray(arg.onResolve));\n const onReject = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onReject).concat(asArray(arg.onReject));\n const onSettle = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onSettle).concat(asArray(arg.onSettle));\n if (onResolve.length)\n this.#pledge.promise.then(val => onResolve.forEach(cb => cb(val)));\n if (onReject.length)\n this.#pledge.promise.catch(err => onReject.forEach(cb => cb(err)));\n if (onSettle.length)\n this.#pledge.promise.finally(() => onSettle.forEach(cb => cb()));\n if (this.#status.catch)\n this.#pledge.promise.catch(err => this.#catch(this.#status, err));\n }\n else {\n this.#dbg = new Logify();\n Object.assign(this.#status, ifDefined({ tag: arg ?? __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, }));\n }\n this.#pledge.promise.catch(() => { }); // global catch-all to prevent unhandled rejections\n Object.freeze(this); // make this instance immutable\n }\n get [Symbol.toStringTag]() {\n return 'Pledge';\n }\n [Symbol.dispose]() {\n if (this.isPending)\n this.reject(new Error(`Pledge disposed`)); // discard pending Pledge (to notify wait-ers)\n }\n get status() {\n return cleanify(this.#status);\n }\n get promise() {\n return this.#pledge.promise;\n }\n get state() {\n return this.#status.state.description;\n }\n get isPending() {\n return this.#status.state === Pledge.STATE.Pending;\n }\n get isResolved() {\n return this.#status.state === Pledge.STATE.Resolved;\n }\n get isRejected() {\n return this.#status.state === Pledge.STATE.Rejected;\n }\n get isSettled() {\n return this.#status.state !== Pledge.STATE.Pending;\n }\n toString() {\n return JSON.stringify(this.status);\n }\n resolve(value) {\n if (this.isPending) {\n this.#status.settled = value;\n this.#status.state = Pledge.STATE.Resolved;\n this.#pledge.resolve(value); // resolve, then trigger any Pledge.onResolve, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n reject(error) {\n if (this.isPending) {\n this.#status.error = error;\n this.#status.state = Pledge.STATE.Rejected;\n this.#pledge.reject(error); // reject, then trigger any Pledge.onReject, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n then(fn) {\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Pledge = _classThis;\n})();\nexport { Pledge };\n//# sourceMappingURL=pledge.class.js.map"],"names":["isTempo","ranges","key","scope","description","define","qtr.key","qtr.scope","qtr.description","qtr.define","szn.key","szn.scope","szn.description","szn.define","zdc.key","zdc.scope","zdc.description","zdc.define","per.key","per.scope","per.description","per.define","enums.WEEKDAY","enums.WEEKDAYS","enums.MONTH","enums.MONTHS","enums.DURATION","enums.DURATIONS","enums.SEASON","enums.COMPASS","enums.ELEMENT","enums.LIMIT","enums.PARSE","enums.FORMAT","enums.MUTATION","enums.OPTION","enums.ZONED_DATE_TIME"],"mappings":"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","x_google_ignoreList":[1]} \ No newline at end of file diff --git a/packages/tempo/dist/tempo.bundle.js b/packages/tempo/dist/tempo.bundle.js new file mode 100644 index 00000000..bce087d1 --- /dev/null +++ b/packages/tempo/dist/tempo.bundle.js @@ -0,0 +1,3220 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Tempo = {})); +})(this, (function (exports) { 'use strict'; + + /** + * This file verifies native Temporal API support. + * Tempo requires an environment with native Temporal support or a user-provided polyfill. + */ + // @ts-ignore + if (!globalThis.Temporal) { + const message = ` +[Tempo] Temporal API not found. +This library requires the ECMAScript Temporal API. Please ensure your environment +supports it natively (Node.js 20+, modern browsers) or provide your own polyfill. + +To add a polyfill to your project: +1. Install: npm install @js-temporal/polyfill +2. Import at your entry point: import '@js-temporal/polyfill'; +`; + console.error(message); + throw new Error('Temporal API not found.'); + } + + /****************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + /* global Reflect, Promise, SuppressedError, Symbol, Iterator */ + + + function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { + function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } + var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; + var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; + var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); + var _, done = false; + for (var i = decorators.length - 1; i >= 0; i--) { + var context = {}; + for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; + for (var p in contextIn.access) context.access[p] = contextIn.access[p]; + context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; + var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); + if (kind === "accessor") { + if (result === void 0) continue; + if (result === null || typeof result !== "object") throw new TypeError("Object expected"); + if (_ = accept(result.get)) descriptor.get = _; + if (_ = accept(result.set)) descriptor.set = _; + if (_ = accept(result.init)) initializers.unshift(_); + } + else if (_ = accept(result)) { + if (kind === "field") initializers.unshift(_); + else descriptor[key] = _; + } + } + if (target) Object.defineProperty(target, contextIn.name, descriptor); + done = true; + } + function __runInitializers(thisArg, initializers, value) { + var useValue = arguments.length > 2; + for (var i = 0; i < initializers.length; i++) { + value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); + } + return useValue ? value : void 0; + } + function __setFunctionName(f, name, prefix) { + if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; + return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); + } + function __classPrivateFieldGet(receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); + } + + function __classPrivateFieldSet(receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; + } + + typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; + }; + + /** the primitive type reported by toStringTag() */ + const protoType = (obj) => Object.prototype.toString.call(obj).slice(8, -1); + /** + * return an object's type as a ProperCase string. + * if instance, return Class name + */ + const getType = (obj, ...instances) => { + const type = protoType(obj); + switch (true) { + case type === 'Object': + const name = isArrayLike(obj) + ? 'ArrayLike' // special case Object: ArrayLike + : obj.constructor?.name ?? 'Object'; // some Objects do not have a constructor method + return (instances + .find(inst => obj instanceof inst.class)?.type // allow for 'real' name of Instance, after minification + ?? name); // return Object name + case type === 'Function' && Function.prototype.toString.call(obj).startsWith('class '): + return 'Class'; + default: + return type; + } + }; + /** return TypeValue object */ + const asType = (value, ...instances) => ({ type: getType(value, ...instances), value }); + /** assert value is one of a list of Types */ + const isType = (obj, ...types) => types.includes(getType(obj)); + /** Type-Guards: assert \ is of \ */ + const isPrimitive = (obj) => isType(obj, 'String', 'Number', 'BigInt', 'Boolean', 'Symbol', 'Undefined', 'Void', 'Null', 'Empty'); + const isReference = (obj) => !isPrimitive(obj); + const isIterable = (obj) => Symbol.iterator in Object(obj) && !isString(obj); + const isString = (obj) => isType(obj, 'String'); + const isNumber = (obj) => isType(obj, 'Number') && isFinite(obj); + const isInteger = (obj) => isType(obj, 'BigInt'); + const isIntegerLike = (obj) => isType(obj, 'String') && /^-?[0-9]+n$/.test(obj); + const isArray = (obj) => isType(obj, 'Array'); + const isArrayLike = (obj) => protoType(obj) === 'Object' && 'length' in obj && Object.keys(obj).every(key => key === 'length' || !isNaN(Number(key))); + const isObject = (obj) => isType(obj, 'Object'); + const isDate = (obj) => isType(obj, 'Date'); + const isRegExp = (obj) => isType(obj, 'RegExp'); + const isRegExpLike = (obj) => isType(obj, 'String') && /^\/.*\/$/.test(obj); + const isSymbol = (obj) => isType(obj, 'Symbol'); + const isSymbolFor = (obj) => isType(obj, 'Symbol') && Symbol.keyFor(obj) !== undefined; + const isNull = (obj) => isType(obj, 'Null'); + const isNullish = (obj) => isType(obj, 'Null', 'Undefined', 'Void', 'Empty'); + const isUndefined = (obj) => isType(obj, 'Undefined', 'Void', 'Empty'); + const isDefined = (obj) => !isNullish(obj); + const isFunction = (obj) => isType(obj, 'Function', 'AsyncFunction'); + const isMap = (obj) => isType(obj, 'Map'); + const isSet = (obj) => isType(obj, 'Set'); + // non-standard Objects + const isTempo$1 = (obj) => isType(obj, 'Tempo'); + const nullToValue = (obj, value) => obj ?? value; + /** object has no values */ + const isEmpty = (obj) => isNullish(obj) + || (isObject(obj) && (Reflect.ownKeys(obj).length === 0)) + || (isString(obj) && (obj.trim().length === 0)) + || (isNumber(obj) && (isNaN(obj) === true)) + || (isArray(obj) && (obj.length === 0)) + || (isSet(obj) && (obj.size === 0)) + || (isMap(obj) && (obj.size === 0)); + + /** property marker used to unwrap proxies in ownEntries() */ + const $Target = Symbol.for('$Target'); + function omit(obj, ...keys) { + const { type, value } = asType(obj); + switch (type) { + case 'Array': + if (isEmpty(keys)) { + value.clear(); // clear entire Array + break; + } + keys + .sort() + .reverse() // remove from end-to-start to preserve indexes + .forEach(key => value.splice(Number(key), 1)); // remove Array index + break; + case 'Object': + (isEmpty(keys) ? ownKeys(value) : keys) // if no {keys}, assume all ownKeys + .forEach(key => Reflect.deleteProperty(value, key)); + } + return value; // return Object reference, even though Object has been mutated + } + // These functions are to preserve the typescript 'type' of an object's keys & values + // and will include both string and symbol keys + /** array of all enumerable PropertyKeys */ + function ownKeys(json) { + return ownEntries(json).map(([key]) => key); + } + /** array of all enumerable object values */ + function ownValues(json) { + return ownEntries(json).map(([_, value]) => value); + } + /** tuple of enumerable entries with string | symbol keys */ + function ownEntries(json, all = false) { + if (!json || typeof json !== 'object') + return []; + const getOwn = (obj) => { + const tgt = obj[$Target] ?? obj; // unwrap if it's a proxy + return Reflect.ownKeys(tgt) + .filter(key => Object.getOwnPropertyDescriptor(tgt, key)?.enumerable) + .map(key => [key, tgt[key]]); + }; + if (!all) + return getOwn(json); + // all=true: collect per-level bottom-up, reverse to top-down, dedup via Map + // Map preserves first-insertion position but allows value update (own key shadows ancestor) + const levels = []; + const limit = 50; // prevent infinite loops (increased from 10) + let depth = 0; + let proto = json; + do { + const t = proto[$Target] ?? proto; // CRITICAL: unwrap before checking marker to avoid trap recursion + const lvl = getOwn(proto); + if (lvl.length) + levels.push(lvl); + proto = Object.getPrototypeOf(t); + } while (proto && proto !== Object.prototype && ++depth < limit); + return [...new Map(levels.reverse().flat()).entries()]; + } + /** return an Object containing all 'own' and 'inherited' enumerable properties */ + function allObject(json) { + return Object.fromEntries(ownEntries(json, true)); + } + /** get a string-array of 'getter' names for an object */ + const getAccessors = (obj = {}) => { + return ownAccessors(obj, 'get'); + }; + const ownAccessors = (obj = {}, type) => { + const accessors = Object.getOwnPropertyDescriptors(obj.prototype || Object.getPrototypeOf(obj)); + return ownEntries(accessors) + .filter(([_, descriptor]) => isFunction(descriptor[type])) + .map(([key, _]) => key); + }; + + /** Javascript Runtimes */ + const CONTEXT = { + 'Unknown': 'unknown', + 'Browser': 'browser', + 'NodeJS': 'nodejs', + 'GoogleAppsScript': 'google-apps-script', + }; + /** determine JavaScript environment context */ + const getContext = () => { + const global = globalThis; + if (isDefined(global.SpreadsheetApp)) + return { global, type: CONTEXT.GoogleAppsScript }; + if (isDefined(global.window?.document)) + return { global, type: CONTEXT.Browser }; + if (isDefined(global.process?.versions?.node)) + return { global, type: CONTEXT.NodeJS }; + return { global, type: CONTEXT.Unknown }; + }; + // useful for those times when a full Enumify object is not needed, but still lock the Object from mutations + /** deep-freeze an Array | Object to make it immutable */ + function secure(obj) { + if (isReference(obj)) // skip primitive values + ownValues(obj) // retrieve the properties on obj + .forEach(val => Object.isFrozen(val) || secure(val)); // secure each value, if not already Frozen + return Object.freeze(obj); // freeze the object itself + } + + /** curry a Function to allow partial calls */ + function curry(fn) { + return function curried(...args) { + return (args.length >= fn.length) + ? fn(...args) + : (...nextArgs) => curried(...args, ...nextArgs); + }; + } + const wm = new WeakMap(); + /** define a Descriptor for an Object's memoized-method */ + function memoizeMethod(name, fn) { + return { + enumerable: false, + configurable: false, + writable: false, + value: function (...args) { + const key = `${String(name)},${JSON.stringify(args)}`; + let cache = wm.get(this); + if (!cache) { // add a new object into the WeakMap + cache = Object.create(null); + wm.set(this, cache); + } + if (isUndefined(cache[key])) { // first time for this method + cache[key] = fn.apply(this, args); // evaluate the method + secure(cache[key]); // freeze the returned value + } + return cache[key]; + } + }; + } + + /** registry of registered classes */ + // DO NOT EDIT THIS VALUE: used by decorator.library.ts + const Registry = new Map(); + // be aware that 'structuredClone' preserves \ values... + // and JSON.stringify() does not + /** make a deep-copy, using standard browser or JSON functions */ + function clone(obj, opts) { + try { + return globalThis.structuredClone(obj, opts); + } + catch { + return cleanify(obj); // fallback to JSON functions + } + } + /** return a copy. remove unsupported values (e.g. \, function) */ + function cleanify(obj) { + try { + return JSON.parse(JSON.stringify(obj)); // run any toString() methods + } + catch (error) { + console.warn('Could not clean object: ', obj); + return { ...obj }; + } + } + /** deep-copy an Object, and optionally replace \ fields with a Sentinel function call */ + function cloneify(obj, sentinel) { + try { + return objectify(stringify(obj), sentinel); + } + catch (error) { + console.warn('Could not cloneify object: ', obj); + console.warn('stack: ', error.stack); + return obj; + } + } + function replacer(key, obj) { return isEmpty(key) ? obj : stringize(obj); } + function reviver(_key, val) { return decode(val); } + // safe-characters [sp " ; < > [ ] ^ { | }] + const safeList = ['20', '22', '3B', '3C', '3E', '5B', '5D', '5E', '7B', '7C', '7D']; + /** encode control characters, then replace a safe-subset back to text-string */ + function encode(val) { + let enc = encodeURI(val); + if (enc.includes('%')) { // if an encoded URI might be in string + safeList.forEach(code => { + const uri = '%' + code; + const reg = new RegExp(uri, 'g'); + enc = enc.replace(reg, decodeURI(uri)); + }); + } + return enc; + } + /** decode control characters */ + function decode(val) { + if (isString(val)) { + try { + return decodeURI(val); // might fail if badly encoded '%' + } + catch (error) { + // console.warn(`decodeURI: ${(error as Error).message} -> ${val}`); + } + } + return val; // return original value + } + /** check type can be stringify'd */ + function isStringable(val) { + return !isType(val, 'Function', 'AsyncFunction', 'WeakMap', 'WeakSet', 'WeakRef'); + } + /** string representation of a single key:value Object */ + function oneKey(type, value) { + return `{"$${type}":${value}}`; + } + /** Symbols in an Object-key will need special treatment */ + function fromSymbol(key) { + return stringize(isSymbol(key) // @@(name) for global, @(name) for local symbols + ? `${isSymbolFor(key) ? '@' : ''}@(${key.description ?? ''})` + : key); + } + const symKey = /^@(@)?\(([^\)]*)\)$/; // pattern to match a stringify'd Symbol + /** reconstruct a Symbol from a string-representation of a key */ + function toSymbol(value) { + const [pat, keyFor, desc] = value.toString().match(symKey) || [null, undefined, undefined]; + switch (true) { + case isSymbol(value): // already a Symbol + case isNullish(pat): // incorrectly encoded Symbol + case isDefined(keyFor) && isUndefined(desc): // incorrectly encoded global Symbol + return value; + case isDefined(keyFor): // global Symbol + return Symbol.for(desc); + case isUndefined(keyFor): // local Symbol + default: + return Symbol(desc); + } + } + /** + * For items which are not currently serializable via standard JSON.stringify (Undefined, BigInt, Set, Map, Symbol, etc.) + * this creates a stringified, single key:value Object to represent the value; for example '{ "$BigInt": 123 }' + * + * Drawbacks: + * no support Function / WeakMap / WeakSet / WeakRef + * limited support for user-defined Classes (must be specifically registered with @Serialize() decorator) + */ + /** + * serialize Objects for string-safe stashing in WebStorage, Cache, etc + * uses JSON.stringify where available, else returns stringified single key:value Object '{[$type]: value}' + */ + function stringify(obj) { + return stringize(obj, false); + } + /** + * internal function to process stringify-requests (and hide second parameter) + * where first argument is the object to stringify, and + * the second argument is a boolean to indicate if function is being called recursively + */ + function stringize(obj, recurse = true) { + const arg = asType(obj); + const one = curry(oneKey)(arg.type); // curry the oneKey() function + switch (arg.type) { + case 'String': + if (!recurse) { // if a top-level string (e.g. 'true' or '1234') + recurse = arg.value === 'true' // ensure true|false|null|1234 are quoted by JSON.stringify + || arg.value === 'false' // so they will be correctly identified during objectify() + || arg.value === 'null' + || parseFloat(arg.value).toString() === arg.value; + } + return recurse + ? JSON.stringify(encode(arg.value)) // encode string for safe-storage + : encode(arg.value); // dont JSON.stringify a top-level string + case 'Boolean': + case 'Null': + case 'Number': + return JSON.stringify(arg.value); // JSON.stringify will correctly handle these + case 'Void': + case 'Undefined': + return one(JSON.stringify('void')); // preserve 'undefined' values + case 'BigInt': + return one(arg.value.toString()); // even though BigInt has a toString method, it is not supported in JSON.stringify + case 'Object': + const obj = ownEntries(arg.value) + .filter(([, val]) => isStringable(val)) + .map(([key, val]) => `${fromSymbol(key)}: ${stringize(val)}`) + .join(','); + return `{${obj}}`; + case 'Array': + const arr = arg.value + .filter(val => isStringable(val)) + .map(val => stringize(val)) + .join(','); + return `[${arr}]`; + case 'Map': + const map = Array.from(arg.value.entries()) + .filter(([, val]) => isStringable(val)) + .map(([key, val]) => `[${stringize(key)}, ${stringize(val)}]`) + .join(','); + return one(`[${map}]`); + case 'Set': + const set = Array.from(arg.value.values()) + .filter(val => isStringable(val)) + .map(val => stringize(val)) + .join(','); + return one(`[${set}]`); + case 'Symbol': + return one(fromSymbol(arg.value)); + case 'RegExp': + return one(stringize({ source: arg.value.source, flags: arg.value.flags })); + case 'Class': + default: + const value = arg.value; + switch (true) { + case !isStringable(value): // Object is not stringify-able + return undefined; + case isFunction(value.toJSON): // Object has its own toJSON method + return one(stringize(value.toJSON())); + case isFunction(value.toString): // Object has its own toString method + const str = value.toString(); + return one(str.includes('"') // TODO: improve detection of JSON vs non-JSON strings + ? str + : JSON.stringify(str)); + case isFunction(value.valueOf): // Object has its own valueOf method + return one(JSON.stringify(value.valueOf())); + default: // else standard stringify + return one(JSON.stringify(value, replacer)); + } + } + } + /** rebuild an Object from its stringified representation */ + function objectify(str, sentinel) { + if (!isString(str)) + return str; // skip parsing + let parse; + try { + parse = JSON.parse(str, reviver); // catch if cannot parse + } + catch (error) { + if (str.startsWith('"') && str.endsWith('"')) { + console.warn(`objectify.parse: -> ${str}, ${error.message}`); + return str; // bail-out + } + else + return objectify(`"${str}"`, sentinel); // have another try, quoted + } + switch (true) { + case str.startsWith('{') && str.endsWith('}'): // looks like Object + case str.startsWith('[') && str.endsWith(']'): // looks like Array + return traverse(parse, sentinel); // recurse into object + default: + return parse; + } + } + /** recurse into Object / Array, looking for special single key:value Objects */ + function traverse(obj, sentinel) { + if (isObject(obj)) { + return typeify(ownEntries(obj) + .reduce((acc, [key, val]) => Object.assign(acc, { [toSymbol(key)]: typeify(traverse(val, sentinel)) }), {}), sentinel); + } + if (isArray(obj)) { + return ownValues(obj) + .map(val => typeify(traverse(val, sentinel))); + } + return obj; + } + /** rebuild an Object from its single key:value representation */ + function typeify(json, sentinel) { + if (!isObject(json) || ownKeys(json).length !== 1) + return json; // only JSON Objects, with a single key:value pair + const [$type, value] = ownEntries(json)[0]; + if (!String($type).startsWith('$')) + return json; // not a serialized single key:value Object + const type = $type.substring(1); // remove '$' prefix + switch (type) { + case 'String': + case 'Boolean': + case 'Object': + case 'Array': + return value; // these types are already handled by traverse() + case 'Number': + return Number(value); + case 'BigInt': + return BigInt(value); + case 'Null': + return null; + case 'Undefined': + case 'Empty': + case 'Void': + return sentinel?.(); // run Sentinel function to handle undefined values + case 'Date': + return new Date(value); + case 'RegExp': + return new RegExp(value.source, value.flags); + case 'Symbol': + return toSymbol(value); + case 'Map': + return new Map(value); + case 'Set': + return new Set(value); + default: + const cls = Registry.get($type); // lookup registered Class + if (!cls) { + console.warn(`objectify: dont know how to deserialize '${type}'`); + return json; // return original JSON object + } + return Reflect.construct(cls, [value]); // create new Class instance + } + } + + /** + * Some interesting Class Decorators + */ + /** decorator to freeze a Class to prevent modification */ + function Immutable(value, { kind, name, addInitializer }) { + name = String(name); + switch (kind) { + case 'class': + const wrapper = { + [name]: class extends value { + constructor(...args) { + super(...args); + Object.freeze(this); // freeze the instance + } + } + }[name]; + addInitializer(() => { + const protect = (obj) => { + ownEntries(Object.getOwnPropertyDescriptors(obj)) + .filter(([name]) => name !== 'constructor') // dont touch the constructor + .forEach(([name, { configurable, writable }]) => { + if (configurable) { + const update = { configurable: false }; + if (writable) + update.writable = false; // only data descriptors have 'writable' + Object.defineProperty(obj, name, update); + } + }); + }; + protect(value); // protect original static members + protect(value.prototype); // protect original prototype members + protect(wrapper); // protect wrapper static members + protect(wrapper.prototype); // protect wrapper prototype members + }); + return wrapper; + default: + throw new Error(`@Immutable decorating unknown 'kind': ${kind} (${name})`); + } + } + /** register a Class for serialization */ + function Serializable(value, { kind, name, addInitializer }) { + name = String(name); // cast as String + switch (kind) { + case 'class': + addInitializer(() => Registry.set(`$${name}`, value)); // register the class for serialization, via its toString() method + return value; + default: + throw new Error(`@Serializable decorating unknown 'kind': ${kind} (${name})`); + } + } + + const Method = { + Log: 'log', + Info: 'info', + Warn: 'warn', + Debug: 'debug', + Error: 'error', + }; + /** + * provide standard logging methods to the console for a class + */ + let Logify = (() => { + let _classDecorators = [Immutable]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + (class { + static { _classThis = this; } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + __runInitializers(_classThis, _classExtraInitializers); + } + #name; + #opts = {}; + #log(method, ...msg) { + if (this.#opts.debug) + console[method](this.#name, ...msg); + } + /** + * if {catch:true} then show a warning on the console and return + * otherwise show an error on the console and re-throw the error + */ + catch(...msg) { + if (this.#opts.catch) { + this.warn(...msg); // show a warning on the console + return; // safe-return + } + this.error(...msg); // this goes to the console + throw new Error(`${this.#name}${msg.map(m => isObject(m) ? JSON.stringify(m) : String(m)).join(' ')}`); // catch will be loud or silent, based on #catch config + } + /** console.log */ log = (...msg) => this.#log(Method.Log, ...msg); + /** console.info */ info = (...msg) => this.#log(Method.Info, ...msg); + /** console.warn */ warn = (...msg) => this.#log(Method.Warn, ...msg); + /** console.debug */ debug = (...msg) => this.#log(Method.Debug, ...msg); + /** console.error */ error = (...msg) => this.#log(Method.Error, ...msg); + constructor(self, opts = {}) { + const arg = asType(self); + switch (arg.type) { + case 'String': + this.#name = arg.value; + break; + // @ts-ignore + case 'Object': + Object.assign(opts, arg.value); + default: + this.#name = (self ?? this).constructor.name.concat(': ') ?? ''; + } + this.#opts.debug = opts.debug ?? false; // default debug to 'false' + this.#opts.catch = opts.catch ?? false; // default catch to 'false' + } + }); + return _classThis; + })(); + + /** Get nested value */ + function extract(obj, path, dflt) { + if (isEmpty(path)) + return obj; // finished searching + if (!isObject(obj) && !isArray(obj)) + return obj; + return path + .toString() + .replace(/\[([^\[\]]*)\]/g, '.$1.') // convert [indexes] to properties + .split('.') + .filter(field => !isEmpty(field)) // remove empty fields + .reduce((acc, field) => acc?.[field] ?? null, obj) ?? dflt; + } + /** extract only defined values from Object */ + function ifDefined(obj) { + return ownEntries(obj) + .reduce((acc, [key, val]) => { + if (isDefined(val)) + acc[key] = val; + return acc; + }, {}); + } + function looseIndex(arg) { + if (isDefined(arg)) + return isFunction(arg) ? arg() : arg; + return (obj) => isFunction(obj) ? obj() : obj; + } + /** loose object with symbols values */ + looseIndex.stringSymbol = looseIndex(); + /** loose object with symbol keys and RegExp values */ + looseIndex.symbolRegExp = looseIndex(); + /** loose object with symbol keys and string values */ + looseIndex.symbolString = looseIndex(); + /** loose object with string keys and string values */ + looseIndex.stringString = looseIndex(); + + function asArray(arr = [], fill) { + switch (true) { + case isArrayLike(arr): // allow for {length:nn} objects + case isIterable(arr) && !isString(arr): // dont iterate Strings + return Array.from(arr, val => { + return isUndefined(fill) || isDefined(val) + ? val // if no {fill}, then use {val} + : clone(fill); // clone {fill} to create new Objects + }); + default: + return Array.of(arr); + } + } + /** stringify if not nullish */ + function asString(str) { + return isNullish(str) + ? '' + : isInteger(str) + ? str.toString() + 'n' + : stringify(str); + } + /** convert String | Number | BigInt to Number */ + function asNumber(str) { + return parseFloat(str?.toString() ?? 'NaN'); + } + /** convert String | Number to BigInt */ + function asInteger(str) { + const arg = asType(str); + switch (arg.type) { + case 'BigInt': + return arg.value; // already a BigInt + case 'Number': + return BigInt(Math.trunc(arg.value)); // cast as BigInt + case 'String': + return (isIntegerLike(arg.value)) // String representation of a BigInt + ? BigInt(arg.value.slice(0, -1)) // get rid of trailing 'n' + : BigInt(arg.value); + default: + return str; + } + } + /** test if can convert String to Numeric */ + function isNumeric(str) { + const arg = asType(str); + switch (arg.type) { + case 'Number': + case 'BigInt': + return true; + case 'String': + return isIntegerLike(arg.value) + ? true // is Number | BigInt + : !isNaN(asNumber(str)) && isFinite(str); // test if Number + default: + return false; + } + } + /** return as Number if possible, else original String */ + const ifNumeric = (str, stripZero = false) => { + switch (true) { + case isInteger(str): // BigInt → Number + return Number(str); + case isNumber(str): // Number → as-is + return str; + case isNumeric(str) && (!str?.toString().startsWith('0') || stripZero): + return asNumber(str); // numeric String → Number + default: + return str; // non-numeric String → as-is + } + }; + + const context = getContext(); + let storage = context.type === CONTEXT.Browser + ? context.global?.localStorage //as globalThis.Storage // default to localStorage in a browser + : undefined; + function getStorage(key, dflt) { + let store; + if (isUndefined(key)) + return dflt ?? {}; + switch (context.type) { + case CONTEXT.Browser: + store = storage.getItem(key); + break; + case CONTEXT.NodeJS: + store = context.global.process.env[key]; + break; + case CONTEXT.GoogleAppsScript: + store = context.global.PropertiesService?.getUserProperties().getProperty(key); + break; + default: + throw new Error(`Cannot determine Javascript context: ${context.type}`); + } + return isString(store) + ? objectify(store) // rebuild object from its stringified representation + : dflt; + } + /** set / delete storage */ + function setStorage(key, val) { + const stash = isDefined(val) ? stringify(val) : undefined; + const set = isDefined(stash); + switch (context.type) { + case CONTEXT.Browser: + set + ? storage.setItem(key, stash) + : storage.removeItem(key); + break; + case CONTEXT.NodeJS: + set + ? (context.global.process.env[key] = stash) + : (delete context.global.process.env[key]); + break; + case CONTEXT.GoogleAppsScript: + set + ? context.global.PropertiesService?.getUserProperties().setProperty(key, stash) + : context.global.PropertiesService?.getUserProperties().deleteProperty(key); + break; + default: + throw new Error(`Cannot determine Javascript context: ${context.type}`); + } + } + + /** Node.js custom inspection symbol */ + const $Inspect = Symbol.for('nodejs.util.inspect.custom'); + /** Stealth Proxy pattern to allow for iteration and logging over a Frozen object */ + function getProxy(target) { + secure(target); + const tgt = target[$Target] ?? target; + let cachedJSON; + return new Proxy(target, { + isExtensible: (t) => Reflect.isExtensible(t), + preventExtensions: (t) => Reflect.preventExtensions(t), + getOwnPropertyDescriptor: (_, key) => Reflect.getOwnPropertyDescriptor(tgt, key), + getPrototypeOf: () => Reflect.getPrototypeOf(tgt), + deleteProperty: (_, key) => Reflect.deleteProperty(tgt, key), + ownKeys: () => Reflect.ownKeys(tgt), + has: (_, key) => Reflect.has(tgt, key), + set: (_, key, val) => Reflect.set(tgt, key, val), + get: (_, key, receiver) => { + if (key === $Target) + return tgt; // found the 'stop' marker + if (key === $Inspect || key === 'toJSON') { // two special properties require virtual closures + const own = Object.getOwnPropertyDescriptor(tgt, key); + if (own && isFunction(own.value)) // if object already has its own toJSON, return + return own.value; + if (!cachedJSON) { // otherwise, create a virtual closure + const result = allObject(receiver); // resolve full-object representation + cachedJSON = () => result; // memoize for subsequent calls + } + return cachedJSON; // return the memoized closure + } + const val = Reflect.get(tgt, key, receiver); + return (typeof val === 'function') // if the value is a function + ? val.bind(tgt) // bind it to the target + : val; // else return the value + }, + }); + } + + // General functions + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // This section needs to be Function declarations so that they are hoisted + // (because they are referenced in prototype.library) + /** + * clean a string to remove some standard control-characters (tab, line-feed, carriage-return) and trim redundant spaces. + * allow for optional RegExp to specify additional match + */ + function trimAll(str, pat) { + return str + .toString() // coerce to String + .replace(pat, '') // remove regexp, if supplied + .replace(/\t/g, ' ') // replace with + .replace(/(\r\n|\n|\r)/g, ' ') // replace & + .replace(/\s{2,}/g, ' ') // trim multiple + .trim(); // leading/trailing + } + /** every word has its first letter capitalized */ + function toProperCase(...str) { + return str + .flat() // in case {str} was already an array + .map(text => text.replace(/\w\S*/g, word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase())) + .join(' '); + } + function sprintf(fmt, ...msg) { + const regexp = /\$\{(\d)\}/g; // pattern to find "${digit}" parameter markers + let sfmt = asString(fmt); // avoid mutate fmt + if (!isString(fmt)) { // might be an Object + msg.unshift(JSON.stringify(fmt)); // push to start of msg[] + sfmt = ''; // reset the string-format + } + let cnt = 0; // if the format does not contain a corresponding '${digit}' then re-construct the parameters + sfmt = sfmt.replace(/%[sj]/g, _ => `\${${cnt++}}`); // flip all the %s or %j to a ${digit} parameter + const params = Array.from(sfmt.matchAll(regexp)) + .map(match => Number(match[1])); // which parameters are in the fmt + msg.forEach((_, idx) => { + if (!params.includes(idx)) // if more args than params + sfmt += `${sfmt.length === 0 ? '' : sfmt.endsWith(':') ? ' ' : ', '}\${${idx}}`; // append a dummy params to fmt + }); + // 2024-02-21 some Objects do not have a .toString method + return sfmt.replace(regexp, (_, idx) => msg[idx]?.toString?.() || stringify(msg[idx])); + } + /** strip a plural suffix, if endsWith 's' */ + const singular = (val) => val.endsWith('s') ? val.slice(0, -1) : val; + /** + * pad a string with leading character + * @param nbr input value to pad + * @param len fill-length (default: 2) + * @param fill character (default \ for string and \ for number) + * @returns fixed-length string padded on the left with fill-character + */ + const pad = (nbr = 0, len = 2, fill) => nbr.toString().padStart(len, nullToValue(fill, isNumeric(nbr) ? '0' : ' ').toString()); + + /** used to identify the Enumify type */ const tag = 'Enumify'; + /** helper method to create a property descriptor */ + function value(val) { + return { + enumerable: false, + configurable: false, + writable: false, + value: val + }; + } + /** + * private instance of the Enum Prototype, which is then Used to create each new Object-Enum + */ + const ENUM = secure(Object.create(null, { + count: memoizeMethod('count', function () { return this.entries().length; }), + keys: memoizeMethod('keys', function () { return this.entries().map(([key]) => key); }), + values: memoizeMethod('values', function () { return this.entries().map(([_, val]) => val); }), + entries: memoizeMethod('entries', function () { return ownEntries(this, true); }), + invert: memoizeMethod('invert', function () { return enumify(this.entries().reduce((acc, [key, val]) => ({ ...acc, [val]: key }), {})); }), + toString: memoizeMethod('toString', function () { return stringify(this.toJSON()); }), + has: value(function (key) { return this.keys().includes(key); }), + includes: value(function (search) { return this.values().includes(search); }), + keyOf: value(function (search) { return this.invert()[search]; }), + extend: value(function (list) { return enumify.call(this, list); }), + forEach: value(function (fn, thisArg) { this.entries().forEach((entry, index) => fn.call(thisArg, entry, index, this)); }), + filter: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => (fn.call(thisArg, entry, index, this) ? Object.assign(acc, { [entry[0]]: entry[1] }) : acc), {})); }), + map: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => { const res = fn.call(thisArg, entry, index, this); return Object.assign(acc, isArray(res) && res.length === 2 ? { [res[0]]: res[1] } : { [entry[0]]: res }); }, {})); }), + [Symbol.iterator]: value(function () { return this.entries()[Symbol.iterator](); }), + [Symbol.toStringTag]: value(tag), + })); + function enumify(list) { + const proto = this ?? ENUM; + const arg = asType(list); + let stash = {}; + switch (arg.type) { + case 'Enumify': + case 'Object': + Object.assign(stash, arg.value); + break; + case 'Array': + arg.value.forEach((key, index) => { + if (isNumber(key)) + throw new Error('Enumify: numeric keys are not supported'); + Object.assign(stash, { [key]: index }); + }); + break; + default: + throw new Error(`Enumify: invalid argument type: ${arg.type}`); + } + const target = Object.create(proto, Object.getOwnPropertyDescriptors(stash)); + return getProxy(target); + } + /** create an entry in the Serialization Registry to describe how to rebuild an Enum */ + let Enumify = (() => { + let _classDecorators = [Serializable]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + (class { + static { _classThis = this; } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + __runInitializers(_classThis, _classExtraInitializers); + } + constructor(list) { + return enumify(list); + } + }); + return _classThis; + })(); + + /** + * Various enumerations used throughout Tempo library. + * These are exported and added as static getters of the Tempo class. + * Usage example: + * ```typescript + * const dayNames = Tempo.WEEKDAY.keys(); // ['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + * ``` + */ + /** */ + const WEEKDAY = enumify(['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']); + const WEEKDAYS = enumify(['Everyday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']); + const MONTH = enumify(['All', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']); + const MONTHS = enumify(['Every', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']); + const SEASON = enumify({ Summer: 'summer', Autumn: 'autumn', Winter: 'winter', Spring: 'spring' }); + const COMPASS = enumify({ North: 'north', East: 'east', South: 'south', West: 'west' }); + /** number of seconds in a time unit */ + const DURATION = enumify({ + /** approx number of seconds in a year */ year: 31_536_000, + /** approx number of seconds in a month */ month: 2_628_000, + /** number of seconds in a week */ week: 604_800, + /** number of seconds in a day */ day: 86_400, + /** number of seconds in an hour */ hour: 3_600, + /** number of seconds in a minute */ minute: 60, + /** one second */ second: 1, + /** number of seconds in a millisecond */ millisecond: .001, + /** number of seconds in a microsecond */ microsecond: .000_001, + /** number of seconds in a nanosecond */ nanosecond: .000_000_001, + }); + /** number of milliseconds in a time unit */ + const DURATIONS = enumify({ + /** approx number of milliseconds in a year */ years: DURATION.year * 1_000, + /** approx number of milliseconds in a month */ months: DURATION.month * 1_000, + /** number of milliseconds in a week */ weeks: DURATION.week * 1_000, + /** number of milliseconds in a day */ days: DURATION.day * 1_000, + /** number of milliseconds in an hour */ hours: DURATION.hour * 1_000, + /** number of milliseconds in a minute */ minutes: DURATION.minute * 1_000, + /** number of milliseconds in a second */ seconds: DURATION.second * 1_000, + /** one millisecond */ milliseconds: DURATION.millisecond * 1_000, + /** number of milliseconds in a microsecond */ microseconds: DURATION.microsecond * 1_000, + /** number of milliseconds in a nanosecond */ nanoseconds: Number((DURATION.nanosecond * 1_000).toPrecision(6)), + }); + /** pre-defined Format code short-cuts */ + const FORMAT = enumify({ + /** useful for standard date display */ display: '{www}, {dd} {mmm} {yyyy}', + /** useful for standard datestamps */ weekDate: '{www}, {yyyy}-{mmm}-{dd}', + /** useful for standard timestamps */ weekTime: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}', + /** useful for standard full timestamps */ weekStamp: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}', + /** useful for readable month and day */ dayMonth: '{dd}-{mmm}', + /** useful for Date */ dayDate: '{dd}-{mmm}-{yyyy}', + /** display with Time */ dayTime: '{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}', + /** useful for stamping logs */ logStamp: '{yyyy}{mm}{dd}T{hhmiss}.{ff}', + /** useful for sorting display-strings */ sortTime: '{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}', + /** useful for sorting week order */ yearWeek: '{wy}{ww}', + /** useful for sorting month order */ yearMonth: '{yyyy}{mm}', + /** useful for sorting date order */ yearMonthDay: '{yyyy}{mm}{dd}', + /** just Date portion */ date: '{yyyy}-{mm}-{dd}', + /** just Time portion */ time: '{hh}:{mi}:{ss}', + }); + const LIMIT = secure({ + /** Tempo(31-Dec-9999.23:59:59).ns */ maxTempo: Temporal.Instant.from('9999-12-31T23:59:59.999999999+00:00').epochNanoseconds, + /** Tempo(01-Jan-1000.00:00:00).ns */ minTempo: Temporal.Instant.from('1000-01-01T00:00+00:00').epochNanoseconds, + }); + const ELEMENT = enumify({ + yy: 'year', + mm: 'month', + ww: 'week', + dd: 'day', + hh: 'hour', + mi: 'minute', + ss: 'second', + ms: 'millisecond', + us: 'microsecond', + ns: 'nanosecond', + }); + const MUTATION = enumify(ELEMENT.values()).extend(['event', 'period', 'clock', 'time', 'date', 'start', 'mid', 'end']); + const ZONED_DATE_TIME = enumify(['value', 'timeZoneId', 'calendarId', 'monthCode', 'offset', 'timeZone']).extend(ELEMENT.values()); + const OPTION = enumify(['value', 'mdyLocales', 'mdyLayouts', 'store', 'discovery', 'debug', 'catch', 'timeZone', 'calendar', 'locale', 'pivot', 'sphere', 'timeStamp', 'snippet', 'layout', 'event', 'period', 'formats', 'plugins']); + const PARSE = enumify(['mdyLocales', 'mdyLayouts', 'formats', 'pivot', 'snippet', 'layout', 'event', 'period', 'anchor', 'value', 'discovery', 'plugins']); + + var tempo_enum = /*#__PURE__*/Object.freeze({ + __proto__: null, + COMPASS: COMPASS, + DURATION: DURATION, + DURATIONS: DURATIONS, + ELEMENT: ELEMENT, + FORMAT: FORMAT, + LIMIT: LIMIT, + MONTH: MONTH, + MONTHS: MONTHS, + MUTATION: MUTATION, + OPTION: OPTION, + PARSE: PARSE, + SEASON: SEASON, + WEEKDAY: WEEKDAY, + WEEKDAYS: WEEKDAYS, + ZONED_DATE_TIME: ZONED_DATE_TIME + }); + + const SCHEMA = [ + ['year', 'yy'], + ['month', 'mm'], + ['day', 'dd'], + ['hour', 'hh'], + ['minute', 'mi'], + ['second', 'ss'], + ['millisecond', 'ms'], + ['microsecond', 'us'], + ['nanosecond', 'ns'] + ]; + /** + * find where a Tempo fits within a range of DateTime + */ + function getTermRange(tempo, list, keyOnly = true) { + const sorted = [...list] + .sortBy('year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond') + .toReversed(); + const match = sorted + .find(range => { + for (const [rKey, sKey] of SCHEMA) { + const val = range[rKey]; + if (isDefined(val)) { + const sVal = tempo[sKey]; + if (sVal > val) + return true; + if (sVal < val) + return false; + } + } + return true; // fallback if DateTime exactly matches a range criteria + }) + ?? sorted.at(0); // fallback to wraparound at first item + return keyOnly + ? match?.key + : match; + } + + /** definition of fiscal quarter ranges */ + const ranges$3 = [ + [ + { key: 'Q1', day: 1, month: 1, fiscal: 0, sphere: COMPASS.North }, + { key: 'Q2', day: 1, month: 4, fiscal: 0, sphere: COMPASS.North }, + { key: 'Q3', day: 1, month: 7, fiscal: 0, sphere: COMPASS.North }, + { key: 'Q4', day: 1, month: 10, fiscal: 0, sphere: COMPASS.North }, + ], [ + { key: 'Q1', day: 1, month: 7, fiscal: 1, sphere: COMPASS.South }, + { key: 'Q2', day: 1, month: 10, fiscal: 1, sphere: COMPASS.South }, + { key: 'Q3', day: 1, month: 1, fiscal: 0, sphere: COMPASS.South }, + { key: 'Q4', day: 1, month: 4, fiscal: 0, sphere: COMPASS.South }, + ] + ]; + const key$3 = 'qtr'; + const scope$3 = 'quarter'; + const description$3 = 'Fiscal Quarter'; + /** determine where the current Tempo instance fits within the above range */ + function define$3(keyOnly) { + const { yy, config: { sphere } } = this; + const south = sphere !== COMPASS.North; // false = North, true = South + const list = cloneify(ranges$3[+south]); // deep clone the range + list.forEach(itm => itm.fiscal += yy); // calc the fiscal-year for quarter + return getTermRange(this, list, keyOnly); // return the range + } + + /** definition of meteorological season ranges */ + const ranges$2 = [ + [ + { key: 'Spring', day: 20, month: 3, symbol: 'Flower', sphere: COMPASS.North }, + { key: 'Summer', day: 21, month: 6, symbol: 'Sun', sphere: COMPASS.North }, + { key: 'Autumn', day: 23, month: 9, symbol: 'Leaf', sphere: COMPASS.North }, + { key: 'Winter', day: 22, month: 12, symbol: 'Snowflake', sphere: COMPASS.North }, + ], [ + { key: 'Spring', day: 1, month: 9, symbol: 'Flower', sphere: COMPASS.South }, + { key: 'Summer', day: 1, month: 12, symbol: 'Sun', sphere: COMPASS.South }, + { key: 'Autumn', day: 1, month: 3, symbol: 'Leaf', sphere: COMPASS.South }, + { key: 'Winter', day: 1, month: 6, symbol: 'Snowflake', sphere: COMPASS.South }, + ], [ + { key: 'Spring', day: 1, month: 3, symbol: 'Flower', trait: 'A time of renewal and growth' }, + { key: 'Summer', day: 1, month: 6, symbol: 'Sun', trait: 'A period of heat and fruition' }, + { key: 'Autumn', day: 1, month: 9, symbol: 'Leaf', trait: 'A time for harvest and contraction' }, + { key: 'Winter', day: 1, month: 12, symbol: 'Snowflake', trait: 'A period of stillness and consolidation' }, + ] + ]; + const key$2 = 'szn'; + const scope$2 = 'season'; + const description$2 = 'Meteorlogical season'; + /** determine where the current Tempo instance fits within the above range */ + function define$2(keyOnly) { + const { config: { sphere } } = this; + const south = sphere !== COMPASS.North; // false = North, true = South + const list = cloneify(ranges$2[+south]); + if (!keyOnly) { + const cn = getTermRange(this, ranges$2[2], false); // get the chinese season for the current day/month + list.forEach(item => item['CN'] = cn); // add the chinese season to each range item + } + return getTermRange(this, list, keyOnly); + } + + /** definition of astrological zodiac ranges */ + const ranges$1 = [ + [ + { key: 'Aquarius', day: 20, month: 1, symbol: 'Ram', longitude: 300, planet: 'Uranus' }, + { key: 'Pisces', day: 19, month: 2, symbol: 'Fish', longitude: 330, planet: 'Neptune' }, + { key: 'Aries', day: 21, month: 3, symbol: 'Ram', longitude: 0, planet: 'Mars' }, + { key: 'Taurus', day: 20, month: 4, symbol: 'Bull', longitude: 30, planet: 'Venus' }, + { key: 'Gemini', day: 21, month: 5, symbol: 'Twins', longitude: 60, planet: 'Mercury' }, + { key: 'Cancer', day: 22, month: 6, symbol: 'Crab', longitude: 90, planet: 'Moon' }, + { key: 'Leo', day: 23, month: 7, symbol: 'Lion', longitude: 120, planet: 'Sun' }, + { key: 'Virgo', day: 23, month: 8, symbol: 'Maiden', longitude: 150, planet: 'Mercury' }, + { key: 'Libra', day: 23, month: 9, symbol: 'Scales', longitude: 180, planet: 'Venus' }, + { key: 'Scorpio', day: 23, month: 10, symbol: 'Scorpion', longitude: 210, planet: 'Pluto & Mars' }, + { key: 'Sagittarius', day: 22, month: 11, symbol: 'Centaur', longitude: 240, planet: 'Jupiter' }, + { key: 'Capricorn', day: 22, month: 12, symbol: 'Goat', longitude: 270, planet: 'Saturn' }, + ], [ + { key: 'Rat', traits: 'Adaptable, clever' }, + { key: 'Ox', traits: 'Diligent, strong' }, + { key: 'Tiger', traits: 'Passionate, courageous' }, + { key: 'Rabbit', traits: 'Artistic, gentle' }, + { key: 'Dragon', traits: 'Powerful, charismatic' }, + { key: 'Snake', traits: 'Wise, intuitive' }, + { key: 'Horse', traits: 'Energetic, independent' }, + { key: 'Goat', traits: 'Empathetic, calm' }, + { key: 'Monkey', traits: 'Smart, curious' }, + { key: 'Rooster', traits: 'Observant, hardworking' }, + { key: 'Dog', traits: 'Loyal, honest' }, + { key: 'Pig', traits: 'Compassionate, generous' }, + ], [ + { key: 'Wood' }, + { key: 'Fire' }, + { key: 'Earth' }, + { key: 'Metal' }, + { key: 'Water' }, + ] + ]; + const key$1 = 'zdc'; + const scope$1 = 'zodiac'; + const description$1 = 'Astrological Zodiac sign'; + /** determine where the current Tempo instance fits within the above ranges */ + function define$1(keyOnly) { + const list = cloneify(ranges$1[0]); // make a copy of the ranges array + if (!keyOnly) { + const cn = getChineseZodiac(this.yy); // get the chinese zodiac for the current year + list.forEach(item => item['CN'] = cn); // add the chinese zodiac to each item + } + return getTermRange(this, list, keyOnly); + } + /** get the chinese zodiac for a given year */ + function getChineseZodiac(year) { + const animalIndex = (year - 4) % 12; // calculate the animal index + const elementIndex = Math.floor(((year - 4) % 10) / 2); // calculate the element index based on the last digit of the year + const yinYang = year % 2 === 0 ? 'Yang' : 'Yin'; // determine Yin or Yang + return { + animal: ranges$1[1][animalIndex].key, + traits: ranges$1[1][animalIndex].traits, + element: ranges$1[2][elementIndex].key, + yinYang: yinYang + }; + } + + /** definition of daily time periods */ + const ranges = [ + { key: 'midnight', hour: 0 }, + { key: 'early', hour: 4 }, + { key: 'morning', hour: 8 }, + { key: 'midmorning', hour: 10 }, + { key: 'midday', hour: 12 }, + { key: 'afternoon', hour: 15, minute: 30 }, + { key: 'evening', hour: 18 }, + { key: 'night', hour: 20 }, + ]; + const key = 'per'; + const scope = 'period'; + const description = 'Daily time period'; + /** determine where the current Tempo instance fits within the above range */ + function define(keyOnly) { + return getTermRange(this, ranges, keyOnly); + } + + /** + * Built-in term plugin registrations. + * + * This module exports a registration function to be called by tempo.class.ts. + * + * returns an array of Terms to be loaded into Tempo.#terms + */ + var registerTerms = [ + { key: key$3, scope: scope$3, description: description$3, define: define$3 }, + { key: key$2, scope: scope$2, description: description$2, define: define$2 }, + { key: key$1, scope: scope$1, description: description$1, define: define$1 }, + { key: key, scope: scope, description: description, define: define }, + ]; + + // BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW + // TEMPO functionality heavily depends on these patterns + /** common RegExp patterns */ + const Match = { + /** match all {} pairs, if they start with a word char */ braces: /{([\w]+(?:\.[\w]+)*)}/g, + /** named capture-group, if it starts with a letter */ captures: /\(\?<([a-zA-Z][\w]*)>(.*?)(?=) */ modifier: /[\+\-\<\>][\=]?|this|next|prev|last/, + /** offset post keywords (ago|hence) */ affix: /ago|hence/, + /** strip out these characters from a string */ strips: /\(|\)/g, + /** whitespace characters */ spaces: /\s+/g, + /** Z character */ zed: /^Z$/, + }; + /** Tempo Symbol registry */ + const Token = looseIndex()({ + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols + /** year */ yy: Symbol('yy'), + /** month */ mm: Symbol('mm'), + /** day */ dd: Symbol('dd'), + /** hour */ hh: Symbol('hh'), + /** minute */ mi: Symbol('mi'), + /** second */ ss: Symbol('ss'), + /** fraction */ ff: Symbol('ff'), + /** meridiem */ mer: Symbol('mer'), + /** short weekday name */ www: Symbol('www'), + /** relative-suffix */ afx: Symbol('afx'), + /** time-suffix */ sfx: Symbol('sfx'), + /** time unit */ unt: Symbol('unt'), + /** separator */ sep: Symbol('sep'), + /** modifier */ mod: Symbol('mod'), + /** generic number */ nbr: Symbol('nbr'), + /** Tempo event */ evt: Symbol('evt'), + /** Tempo period */ per: Symbol('per'), + /** time zone offset */ tzd: Symbol('tzd'), + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Layout Symbols + /** date */ dt: Symbol('date'), + /** time */ tm: Symbol('time'), + /** date and time */ dtm: Symbol('dateTime'), + /** day-month-year */ dmy: Symbol('dayMonthYear'), + /** month-day-year */ mdy: Symbol('monthDayYear'), + /** year-month-day */ ymd: Symbol('yearMonthDay'), + /** day of month offset */ off: Symbol('offset'), + /** weekDay */ wkd: Symbol('weekDay'), + /** relative offset (years, days, hours, etc) */ rel: Symbol('relativeOffset'), + /** timezone/calendar brackets */ brk: Symbol('brackets'), + }); + /** + * user will need to know these in order to configure their own patterns + * Tempo.Snippet is a simple regex pattern object e.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ } + * Tempo.Layout is a string-combination of Snippet names e.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?' + * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex. + * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument + */ + /** + * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy') + */ + // Note: computed Components ('evt', 'per') are added during 'Tempo.init()' (for static) and/or 'new Tempo()' (per instance) + const Snippet = looseIndex()({ + [Token.yy]: /(?([0-9]{2})?[0-9]{2})/, // arbitrary upper-limit of yy=9999 + [Token.mm]: /(?[0\s]?[1-9]|1[0-2]|Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)/, // month-name (abbrev or full) or month-number 01-12 + [Token.dd]: /(?
[0\s]?[1-9]|[12][0-9]|3[01])(?:\s?(?:st|nd|rd|th))?/, // day-number 01-31 + [Token.hh]: /(?2[0-4]|[01]?[0-9])/, // hour-number 00-24 + [Token.mi]: /(\:(?[0-5][0-9]))/, // minute-number 00-59 + [Token.ss]: /(\:(?[0-5][0-9]))/, // seconds-number 00-59 + [Token.ff]: /(\.(?[0-9]{1,9}))/, // fractional-seconds up-to 9-digits + [Token.mer]: /(\s*(?am|pm))/, // meridiem suffix (am,pm) + [Token.sfx]: /((?:{sep}+|T)({tm}){tzd}?)/, // time-pattern suffix 'T {tm} Z' + [Token.wkd]: /(?Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)/, // day-name (abbrev or full) + [Token.tzd]: /(?Z|(?:\+(?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:00)|-(?:(?:0[0-9]|1[0-1]):?[0-5][0-9]|12:00)))/, // time-zone offset +14:00 to -12:00 + [Token.nbr]: /(?[0-9]*)/, // modifier count + [Token.afx]: new RegExp(`((s)? (?${Match.affix.source}))?{sep}?`), // affix optional plural 's' and (ago|hence) + [Token.mod]: new RegExp(`((?${Match.modifier.source})?{nbr} *)`), // modifier (+,-,<,<=,>,>=) plus optional offset-count + [Token.sep]: new RegExp(`(?:${Match.separator.source})`), // date-input separator character "/\\-., " (non-capture group) + [Token.unt]: /(?year|month|week|day|hour|minute|second|millisecond)(?:s)?/, // useful for '2 days ago' etc + [Token.brk]: /(\[(?[^\]]+)\](?:\[(?[^\]]+)\])?)?/, // timezone/calendar brackets [...] + }); + /** + * a {layout} is a Record of snippet-combinations describing an input DateTime argument + * the Layout's keys are in the order that they will be checked against an input value + */ + const Layout = looseIndex()({ + [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))', // calendar or event + [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period + [Token.dtm]: '({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?', // calendar/event and clock/period + [Token.dmy]: '({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?', // day-month(-year) + [Token.mdy]: '({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?', // month-day(-year) + [Token.ymd]: '({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?', // year-month(-day) + [Token.wkd]: '{mod}?{wkd}{afx}?{sfx}?', // special layout (no {dt}!) used for weekday calcs (only one that requires {wkd} pattern) + [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset + [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago) + }); + /** + * an {event} is a Record of regex-pattern-like-string keys that describe Date strings. + * values can be a string or a function. + * if assigning a function, use standard 'function()' syntax to allow for 'this' binding. + * also, a function should always have a .toString() method which returns a parse-able Date string + */ + const Event = looseIndex()({ + 'new.?years? ?eve': '31 Dec', + 'nye': '31 Dec', + 'new.?years?( ?day)?': '01 Jan', + 'ny': '01 Jan', + 'christmas ?eve': '24 Dec', + 'christmas': '25 Dec', + 'xmas ?eve': '24 Dec', + 'xmas': '25 Dec', + 'now': function () { return this.toPlainDateTime(); }, + 'today': function () { return this.toPlainDate(); }, + 'tomorrow': function () { return this.toPlainDate().add({ days: 1 }); }, + 'yesterday': function () { return this.toPlainDate().add({ days: -1 }); }, + }); + /** + * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings. + * values can be a string or a function. + * if using a function, use regular 'function()' syntax to allow for 'this' binding. + */ + const Period = looseIndex()({ + 'mid[ -]?night': '24:00', + 'morning': '8:00', + 'mid[ -]?morning': '10:00', + 'mid[ -]?day': '12:00', + 'noon': '12:00', + 'after[ -]?noon': '3:00pm', + 'evening': '18:00', + 'night': '20:00', + }); + /** + * a {timeZone} alias dictionary mapping common abbreviations to IANA strings. + * Tempo will check this registry to convert abbreviations before passing them to Temporal. + */ + const TimeZone = looseIndex()({ + 'utc': 'UTC', + 'gmt': 'Europe/London', + 'est': 'America/New_York', + 'cst': 'America/Chicago', + 'mst': 'America/Denver', + 'pst': 'America/Los_Angeles', + 'aest': 'Australia/Sydney', + 'acst': 'Australia/Adelaide', + 'awst': 'Australia/Perth', + 'nzt': 'Pacific/Auckland', + 'cet': 'Europe/Paris', + 'eet': 'Europe/Helsinki', + 'ist': 'Asia/Kolkata', + 'npt': 'Asia/Kathmandu', + 'jst': 'Asia/Tokyo', + }); + /** Reasonable default options for initial Tempo config */ + const Default = secure({ + /** log to console */ debug: false, + /** catch or throw Errors */ catch: false, + /** used to parse two-digit years*/ pivot: 75, /** @link https://en.wikipedia.org/wiki/Date_windowing */ + /** precision to measure timestamps (ms | us) */ timeStamp: 'ms', + /** calendaring system */ calendar: 'iso8601', + /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https://en.wikipedia.org/wiki/Date_format_by_country */ + /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']], + }); + + /** provide a sort-function to order a set of keys */ + function sortBy(...keys) { + const sortOptions = keys // coerce string => SortBy + .flat() // flatten Array-of-Array + .map(key => isObject(key) ? key : { field: stringify(key) }); // build Array of sort-options + return (left, right) => { + let result = 0; // 0 = same, -1 = leftright + sortOptions.forEach(key => { + if (result === 0) { // no need to look further if result !== 0 + const dir = key.dir === 'desc' ? -1 : 1; + const field = key.field + (key.index ? `[${key.index}]` : ''); + const valueA = extract(left, field, nullToValue(key.default, 0)); + const valueB = extract(right, field, nullToValue(key.default, 0)); + switch (true) { + case isNumber(valueA) && isNumber(valueB): + case isDate(valueA) && isDate(valueB): + case isTempo$1(valueA) && isTempo$1(valueB): + result = dir * (valueA - valueB); + break; + default: + result = dir * asString(valueA)?.localeCompare(asString(valueB)); + break; + } + } + }); + return result; + }; + } + /** return an array sorted-by a series of keys */ + function sortKey(array, ...keys) { + return array.sort(sortBy(...keys)); + } + function byKey(arr, fnKey, ...keys) { + if (isFunction(fnKey)) + return Object.groupBy(arr, fnKey); + const keyed = [fnKey] // mapFn is a keyof T + .concat(keys) // append any trailing keyof T[] + .flat(); // flatten Array-of-Array + return Object.groupBy(arr, itm => // group an array into an object with named keys + keyed + .map(key => isUndefined(itm[key]) ? '' : stringify(itm[key])) + .join('.')); + } + function byLkp(arr, fnKey, ...keys) { + const group = isFunction(fnKey) + ? byKey(arr, fnKey) // group by the callback function + : byKey(arr, fnKey, ...keys); // group by the list of keys + return ownEntries(group) + .reduce((acc, [key, grp]) => Object.assign(acc, { [key]: grp?.pop() }), {}); + } + + // Prototype extensions + // Remember to define any imports as a Function Declaration (not a Function Expression) + // so that they are 'hoisted' prior to extending a prototype + /** + * extend an Object's prototype to include new method, if no clash + */ + const patch = (proto, property, method) => { + if (Object.hasOwn(proto.prototype, property)) { // if already defined, + if (trimAll(method.toString()) !== trimAll(proto.prototype?.[property]?.toString())) + console.warn(`${proto.name}.${property} already defined`); // show warning if different method definition + } + else { + Object.defineProperty(proto.prototype, property, { + configurable: false, + enumerable: false, + writable: false, + value: method, + }); + } + }; + patch(String, 'trimAll', function (pat) { return trimAll(this, pat); }); + patch(String, 'toProperCase', function () { return toProperCase(this); }); + function sorted(...keys) { return sortKey(this, ...keys); } + patch(Array, 'orderBy', sorted); // order array by named keys + patch(Array, 'sortBy', sorted); // sort array by named keys + function keyed(...keys) { return byKey(this, ...keys); } + function lookup(...keys) { return byLkp(this, ...keys); } + patch(Array, 'keyedBy', keyed); // reduce array by named keys + patch(Array, 'lookupBy', lookup); // reduce array by named keys, only one entry per key + patch(Array, 'tap', function (fn) { + fn(this); // run an arbitrary function + return this; // then return the original array + }); + patch(Array, 'clear', function () { + this.fill(null).length = 0; // wipe the contents, then set the 'length' to zero + return this; + }); + patch(Array, 'distinct', function (mapfn) { + return mapfn + ? this.map(mapfn).distinct() // run the mapping selector, then recurse + : Array.from(new Set(this)); // eliminate duplicates + }); + patch(Array, 'cartesian', function (...args) { + const [a, b = [], ...c] = args.length === 0 ? this : args; + const cartFn = (a, b) => asArray([]).concat(...a.map(d => b.map(e => asArray([]).concat(d, e)))); + return b.length + ? this.cartesian(cartFn(a, b), ...c) // run the cartFn function, then recurse + : asArray(a || []); // return the collated result + }); + + // #region Const variables + /** key to use for storage / globalThis Symbol */ const $Tempo = Symbol.for('$Tempo'); + /** current execution context*/ const Context = getContext(); + // #endregion Const variables + /** + * # Tempo + * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. + * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. + */ + let Tempo = (() => { + var _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns; + let _classDecorators = [Serializable, Immutable]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + var Tempo = class { + static { _classThis = this; } + static { __setFunctionName(this, "Tempo"); } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + Tempo = _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + } + // #region Static enum properties~~~~~~~~~~~~~~~~~~~~~~~~~ + /** Weekday names (short-form) */ static get WEEKDAY() { return WEEKDAY; } + /** Weekday names (long-form) */ static get WEEKDAYS() { return WEEKDAYS; } + /** Month names (short-form) */ static get MONTH() { return MONTH; } + /** Month names (long-form) */ static get MONTHS() { return MONTHS; } + /** Time durations as seconds (singular) */ static get DURATION() { return DURATION; } + /** Time durations as milliseconds (plural) */ static get DURATIONS() { return DURATIONS; } + /** Quarterly Seasons */ static get SEASON() { return SEASON; } + /** Compass cardinal points */ static get COMPASS() { return COMPASS; } + /** Tempo to Temporal DateTime Units map */ static get ELEMENT() { return ELEMENT; } + /** Pre-configured format {name -> string} pairs */ static get FORMAT() { return __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.formats; } + /** some useful Dates */ static get LIMIT() { return LIMIT; } + static { + // #endregion + // #region Static private properties~~~~~~~~~~~~~~~~~~~~~~ + _Tempo_dbg = { value: new Logify('Tempo', { + debug: Default?.debug ?? false, + catch: Default?.catch ?? false + }) }; + } + static { + /** Tempo state for the global configuration */ _Tempo_global = { value: {} }; + } + static { + /** a collection of parse rule-matches */ _Tempo_pending = { value: void 0 }; + } + static { + /** cache for next-available 'usr' Token key */ _Tempo_usrCount = { value: 0 }; + } + static { + /** mutable list of registered term plugins */ _Tempo_terms = { value: [] }; + } + static { + /** try to infer hemisphere using the timezone's daylight-savings setting */ + _Tempo_setSphere = { value: (shape, options) => { + if (isUndefined(shape.config.timeZone) || __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, options, 'sphere')) + return shape.config.sphere; // already specified or no timeZone to calculate from + // use a fixed date (2024-01-01) to compare offsets for hemisphere detection + const zdt = new Temporal.ZonedDateTime(BigInt(1_704_067_200) * BigInt(1_000_000_000), shape.config.timeZone); + const jan = zdt.with({ day: 1, month: 1 }).offsetNanoseconds; + const jun = zdt.with({ day: 1, month: 6 }).offsetNanoseconds; + const dst = Math.sign(jan - jun); // timeZone offset difference between Jan and Jun + switch (dst) { + case -1: + return Tempo.COMPASS.North; // clock moves backward in Northern hemisphere + case 1: + return Tempo.COMPASS.South; // clock moves forward in Southern hemisphere + case 0: + default: + return void 0; // timeZone does not observe DST + } + } }; + } + static { + /** properCase week-day / calendar-month */ + _Tempo_prefix = { value: (str) => toProperCase(String(str).substring(0, 3)) }; + } + static { + /** get first Canonical name of a supplied locale */ + _Tempo_locale = { value: (locale) => { + let language; + try { // lookup locale + language = Intl.getCanonicalLocales(locale.replace('_', '-'))[0]; + } + catch (error) { } // catch unknown locale + const global = Context.global; + return language ?? + global?.navigator?.languages?.[0] ?? // fallback to current first navigator.languages[] + global?.navigator?.language ?? // else navigator.language + Default.locale ?? // else default locale + locale; // cannot determine locale + } }; + } + // #endregion Static private methods + // #region Static public methods~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** + * Bootstrap the library with a Custom Global Discovery object. + * + * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern + * and automatically calls `Tempo.init()` to apply the discovered configuration. + * + * @param config - The Global Discovery object to register. + * @returns The resolved global configuration. + */ + static discover(config) { + globalThis[$Tempo] = config; + return this.init(); + } + /** + * Initializes the global default configuration for all subsequent `Tempo` instances. + * + * Settings are inherited in this priority: + * 1. Reasonable library defaults (defined in tempo.config.js) + * 2. Persistent storage (e.g. localStorage), if available. + * 3. `options` provided to this method. + * + * @param options - Configuration overrides to apply globally. + * @returns The resolved global configuration. + */ + static init(options = {}) { + if (isEmpty(options)) { // if no options supplied, reset all + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse = { + snippet: Object.assign({}, Snippet), + layout: Object.assign({}, Layout), + event: Object.assign({}, Event), + period: Object.assign({}, Period), + mdyLocales: __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_mdyLocales).call(Tempo, Default.mdyLocales), + mdyLayouts: asArray(Default.mdyLayouts), + pivot: Default.pivot, + }; + const { timeZone, calendar } = Intl.DateTimeFormat().resolvedOptions(); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config = Object.assign({}, omit({ ...Default }, ...PARSE.keys()), // use Default as base, omit parse-related + { + calendar, + timeZone, + locale: __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_locale).call(Tempo), + discovery: Symbol.keyFor($Tempo), + formats: Object.create(FORMAT), + scope: 'global' + }); + __classPrivateFieldSet(Tempo, _classThis, 0, "f", _Tempo_usrCount); // reset user-key counter + for (const key of Object.keys(Token)) // purge user-allocated Tokens + if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys + delete Token[key]; + Tempo.addTerm(...registerTerms); // register built-in term plugins + const storeKey = Symbol.keyFor($Tempo); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), $Tempo)); + } + else { + const discovery = options.discovery ?? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.discovery ?? Symbol.keyFor($Tempo); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), discovery), options); + } + if (Context.type === CONTEXT.Browser || options.debug === true) + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(Tempo.config, 'Tempo:', __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config); + return Tempo.config; + } + /** release global config and reset library to defaults */ + static [(_Tempo_proto = function _Tempo_proto(obj) { return Object.getPrototypeOf(obj); }, _Tempo_hasOwn = function _Tempo_hasOwn(obj, key) { return Object.hasOwn(obj, key); }, _Tempo_isLocal = function _Tempo_isLocal(shape) { return shape.config.scope === 'local'; }, _Tempo_create = function _Tempo_create(obj, name) { return Object.create(__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, obj)[name]); }, _Tempo_setEvents = function _Tempo_setEvents(shape) { + const events = ownEntries(shape.parse.event, true); + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'event') && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'isMonthDay')) + return; // no local change needed + const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal + const groups = events + .map(([pat, _], idx) => `(?<${src}evt${idx}>${pat})`) // assign a number to the pattern + .join('|'); // make an 'Or' pattern for the event-keys + if (groups) { + const protoEvt = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.evt]?.source; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || groups !== protoEvt) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet')) + shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'snippet'); + Object.defineProperty(shape.parse.snippet, Token.evt, { + value: new RegExp(groups), + enumerable: true, + writable: true, + configurable: true + }); + } + } + if (shape.parse.isMonthDay) { + const protoDt = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.layout)[Token.dt]; + const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})'; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || localDt !== protoDt) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout')) + shape.parse.layout = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'layout'); + Object.defineProperty(shape.parse.layout, Token.dt, { + value: localDt, + enumerable: true, + writable: true, + configurable: true + }); + } + } + }, _Tempo_setPeriods = function _Tempo_setPeriods(shape) { + const periods = ownEntries(shape.parse.period, true); + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'period')) + return; // no local change needed + const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal + const groups = periods + .map(([pat, _], idx) => `(?<${src}per${idx}>${pat})`) // {pattern} is the 1st element of the tuple + .join('|'); // make an 'or' pattern for the period-keys + if (groups) { + const protoPer = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.per]?.source; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || groups !== protoPer) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet')) + shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'snippet'); + Object.defineProperty(shape.parse.snippet, Token.per, { + value: new RegExp(groups), + enumerable: true, + writable: true, + configurable: true + }); + } + } + }, _Tempo_isMonthDay = function _Tempo_isMonthDay(shape) { + const monthDay = [...asArray(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.mdyLocales)]; + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales')) + monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global) + return monthDay.some(mdy => { + const tzs = mdy.timeZones ?? mdy.getTimeZones?.() ?? []; + return tzs.includes(shape.config.timeZone); + }); + }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) { + const layouts = ownEntries(shape.parse.layout); // get entries of Layout Record + const swap = shape.parse.mdyLayouts; // get the swap-tuple + let chg = false; // no need to rebuild, if no change + swap + .forEach(([dmy, mdy]) => { + const idx1 = layouts.findIndex(([key]) => key.description === dmy); // 1st swap element exists in {layouts} + const idx2 = layouts.findIndex(([key]) => key.description === mdy); // 2nd swap element exists in {layouts} + if (idx1 === -1 || idx2 === -1) + return; // no pair to swap + const swap1 = (idx1 < idx2) && shape.parse.isMonthDay; // we prefer {mdy} and the 1st tuple was found earlier than the 2nd + const swap2 = (idx1 > idx2) && !shape.parse.isMonthDay; // we dont prefer {mdy} and the 1st tuple was found later than the 2nd + if (swap1 || swap2) { // since {layouts} is an array, ok to swap by-reference + [layouts[idx1], layouts[idx2]] = [layouts[idx2], layouts[idx1]]; + chg = true; + } + }); + if (chg) + shape.parse.layout = Object.fromEntries(layouts); // rebuild Layout in new parse order + }, _Tempo_setConfig = function _Tempo_setConfig(shape, ...options) { + const mergedOptions = Object.assign({}, ...options); + if (isEmpty(mergedOptions)) // nothing to do + return; + if (mergedOptions.store) // check for local-storage + Object.assign(mergedOptions, { ...Tempo.readStore(mergedOptions.store), ...mergedOptions }); + /** helper to normalize snippet/layout Options into the target Config */ + const collect = (target, value, convert) => { + const itm = asType(value); + target ??= {}; + switch (itm.type) { + case 'Object': + ownEntries(itm.value) + .forEach(([k, v]) => target[Tempo.getSymbol(k)] = convert(v)); + break; + case 'String': + case 'RegExp': + target[Tempo.getSymbol()] = convert(itm.value); + break; + case 'Array': + itm.value.forEach(elm => collect(target, elm, convert)); + break; + } + }; + ownEntries(mergedOptions) + .forEach(([optKey, optVal]) => { + if (isUndefined(optVal)) + return; // skip undefined values + const arg = asType(optVal); + switch (optKey) { + case 'snippet': + case 'layout': + case 'event': + case 'period': + // lazy-shadowing: only create local object if it doesn't already exist on local shape + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, optKey)) + shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, optKey); + const rule = shape.parse[optKey]; + if (['snippet', 'layout'].includes(optKey)) { + collect(rule, arg.value, v => optKey === 'snippet' + ? isRegExp(v) ? v : new RegExp(v) + : isRegExp(v) ? v.source : v); + } + else { + asArray(arg.value) + .forEach(elm => ownEntries(elm).forEach(([key, val]) => rule[key] = val)); + } + break; + case 'mdyLocales': + shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_mdyLocales).call(Tempo, arg.value); + break; + case 'mdyLayouts': // these are the 'layouts' that need to swap parse-order + shape.parse[optKey] = asArray(arg.value); + break; + case 'pivot': + shape.parse["pivot"] = Number(arg.value); + break; + case 'config': + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, shape, arg.value); + break; + case 'timeZone': + const zone = String(arg.value).toLowerCase(); + shape.config.timeZone = TimeZone[zone] ?? arg.value; + break; + case 'formats': + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.config, 'formats')) + shape.config.formats = shape.config.formats.extend({}); // shadow parent prototype + if (isObject(arg.value)) + shape.config.formats = shape.config.formats.extend(arg.value); + break; + case 'discovery': + shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal; + break; + case 'plugins': + asArray(optVal).forEach(p => this.extend(p)); + break; + case 'anchor': + break; // internal anchor used for relativity parsing + default: // else just add to config + Object.assign(shape.config, { [optKey]: optVal }); + break; + } + }); + const isMonthDay = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isMonthDay).call(Tempo, shape); + if (isMonthDay !== __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local' + shape.parse.isMonthDay = isMonthDay; + shape.config.sphere = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_setSphere).call(Tempo, shape, mergedOptions); + if (isDefined(shape.parse.mdyLayouts)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_swapLayout).call(Tempo, shape); + if (isDefined(shape.parse.event)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setEvents).call(Tempo, shape); + if (isDefined(shape.parse.period)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setPeriods).call(Tempo, shape); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setPatterns).call(Tempo, shape); // setup Regex DateTime patterns + }, _Tempo_mdyLocales = function _Tempo_mdyLocales(value) { + return asArray(value) + .map(mdy => new Intl.Locale(mdy)) + .map(mdy => ({ locale: mdy.baseName, timeZones: mdy.getTimeZones?.() ?? [] })); + }, _Tempo_setDiscovery = function _Tempo_setDiscovery(shape, key = shape.config.discovery ?? $Tempo) { + const sym = isString(key) ? Symbol.for(key) : key; + const discovery = globalThis[sym]; + if (!isObject(discovery)) + return {}; + // 1. Process TimeZones (normalize to lowercase for lookup) + const timeZones = discovery.timeZones ?? {}; + for (const [key, value] of Object.entries(timeZones)) + TimeZone[key.toLowerCase()] = value; + // 2. Process Terms + if (discovery.terms) + Tempo.addTerm(...asArray(discovery.terms)); + // 3. Process Formats + if (discovery.formats) + shape.config.formats = shape.config.formats.extend(discovery.formats); + // 4. Process Plugins + if (discovery.plugins) + asArray(discovery.plugins).forEach(p => this.extend(p)); + // 4. Process Options + let opts = discovery.options || {}; + return isFunction(opts) ? opts() : opts; + }, _Tempo_setPatterns = function _Tempo_setPatterns(shape) { + const snippet = shape.parse.snippet; + // if local and no snippet or layout overrides, we can just use the prototype's patterns + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet') && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout')) + return; + // ensure we have our own Map to mutate (shadow if local) + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'pattern')) + shape.parse.pattern = new Map(); + shape.parse.pattern.clear(); // reset {pattern} Map + for (const [sym, layout] of ownEntries(shape.parse.layout, true)) + shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet)); + }, Symbol.dispose)]() { Tempo.init(); } + /** + * Extends the Tempo class with new functionality. + * Plugins can add static or instance methods to the library. + */ + static extend(plugin, options) { + const p = plugin; + if (!p.installed) { + p(options, this, (val) => new this(val)); + p.installed = true; + } + return this; + } + /** Reads options from persistent storage (e.g., localStorage). */ + static readStore(key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { + return getStorage(key, {}); + } + /** Writes configuration into persistent storage. */ + static writeStore(config, key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { + return setStorage(key, config); + } + /** lookup or registers a new `Symbol` for a given key. */ + static getSymbol(key) { + var _b, _c; + if (isUndefined(key)) { + const usr = `usr.${__classPrivateFieldSet(_b = Tempo, _classThis, (_c = __classPrivateFieldGet(_b, _classThis, "f", _Tempo_usrCount), ++_c), "f", _Tempo_usrCount)}`; // allocate a prefixed 'user' key + return Token[usr] = Symbol(usr); // add to Symbol register + } + if (isSymbol(key)) + return key; + if (isString(key) && key.includes('.')) { + const description = key.split('.').pop(); // use last segment as description + return Token[key] ??= Symbol(description); + } + return Token[key] ?? Symbol.for(`$Tempo.${key}`); + } + /** translates {layout} into an anchored, case-insensitive RegExp. */ + static regexp(layout, snippet) { + // helper function to replace {name} placeholders with their corresponding snippets + function matcher(str, depth = 0) { + if (depth > 12) + return isRegExp(str) ? str.source : str; // depth guard + let source = isRegExp(str) ? str.source : str; + if (isRegExpLike(source)) // string that looks like a RegExp + source = source.substring(1, source.length - 1); // remove the leading/trailing "/" + if (source.startsWith('^') && source.endsWith('$')) + source = source.substring(1, source.length - 1); // remove the leading/trailing anchors (^ $) + return source.replace(Match.braces, (match, name) => { + const token = Tempo.getSymbol(name); // get the symbol for this {name} + const customs = snippet?.[token]?.source ?? snippet?.[name]?.source; + const globals = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.snippet[token]?.source ?? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.snippet[name]?.source; + const layout = Layout[token]; // get resolution source (layout) + let res = customs ?? globals ?? layout; // get the snippet/layout source + if (isNullish(res) && name.includes('.')) { // if no definition found, try fallback + const prefix = name.split('.')[0]; // get the base token name + const pToken = Tempo.getSymbol(prefix); + res = snippet?.[pToken]?.source ?? snippet?.[prefix]?.source + ?? Snippet[pToken]?.source ?? Snippet[prefix]?.source + ?? Layout[pToken]; + } + if (res && name.includes('.')) { // wrap dotted extensions for identification + const safeName = name.replace(/\./g, '_'); + if (!res.startsWith(`(?<${safeName}>`)) + res = `(?<${safeName}>${res})`; + } + return (isNullish(res) || res === match) // if no definition found, + ? match // return the original match + : matcher(res, depth + 1); // else recurse to see if snippet contains embedded "{}" pairs + }); + } + layout = matcher(layout); // initiate the layout-parse + return new RegExp(`^(${layout})$`, 'i'); // translate the source into a regex + } + /** Compares two `Tempo` instances or date-time values. */ + static compare(tempo1, tempo2) { + const one = new Tempo(tempo1), two = new Tempo(tempo2); + return Number((one.nano > two.nano) || -(one.nano < two.nano)) + 0; + } + /** global Tempo configuration */ + static get config() { + return getProxy(omit({ ...__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config }, 'value')); + } + /** global discovery configuration */ + static get discovery() { + const sym = Symbol.for(this.config.discovery); + return getProxy(omit({ ...globalThis[sym], scope: 'discovery' }, 'value')); + } + /** + * Returns a snapshot of the configuration layers used by Tempo. + * Useful for debugging how the final configuration is built. + */ + static get options() { + const keyFor = this.config.store ?? Symbol.keyFor($Tempo); + return { + default: this.default, + discovery: this.discovery, + storage: getProxy(Object.assign({ key: keyFor, scope: 'storage' }, omit(Tempo.readStore(keyFor), 'value'))), + global: this.config, + }; + } + static from(tempo, options) { return new this(tempo, options); } + static now() { return Temporal.Now.instant().epochNanoseconds; } + /** static Tempo.terms getter */ + static get terms() { + return secure(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) + .map(({ define, ...rest }) => rest)); // omit the 'define' method + } + /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ + static addTerm(...plugin) { + asArray(plugin) + .flat(1) + .forEach(p => { + if (!__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).some(t => t.key === p.key)) // check for duplicate key + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).push(p); // append; silently ignore duplicates + }); + } + /** static Tempo properties getter */ + static get properties() { + return secure(getAccessors(Tempo) + .filter(acc => getType(acc) !== 'Symbol')); // omit any Symbol properties + } + /** Tempo initial default settings */ + static get default() { + return secure({ ...Default, scope: 'default', timeZone: TimeZone }); + } + /** + * configuration governing the static 'rules' used when parsing Tempo.DateTime argument + */ + static get parse() { + const parse = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse; + return secure({ + ...parse, // spread primitives like {pivot} + snippet: { ...parse.snippet }, // spread nested objects + layout: { ...parse.layout }, + event: { ...parse.event }, + period: { ...parse.period }, + mdyLocales: [...parse.mdyLocales], + mdyLayouts: [...parse.mdyLayouts], + }); + } + /** iterate over Tempo properties */ + static [(Symbol.iterator)]() { + return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters' + } + // #endregion Static public methods + // #region Instance symbols~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** allow for auto-convert of Tempo to BigInt, Number or String */ + [Symbol.toPrimitive](hint) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.config, getType(this), '.hint: ', hint); + switch (hint) { + case 'string': return this.toString(); // ISO 8601 string + case 'number': return this.epoch.ms; // Unix epoch (milliseconds) + default: return this.nano; // Unix epoch (nanoseconds) + } + } + /** iterate over instance formats */ + [Symbol.iterator]() { + return ownEntries(this.#fmt)[Symbol.iterator](); // instance Iterator over tuple of FormatType[] + } + get [Symbol.toStringTag]() { + return 'Tempo'; // hard-coded to avoid minification mangling + } + // #endregion Instance symbols + // #region Instance properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** constructor tempo */ #tempo; + /** constructor options */ #options = {}; + /** instantiation Temporal Instant */ #now; + /** underlying Temporal ZonedDateTime */ #zdt; + /** temporary anchor used during parsing */ #anchor; + /** prebuilt formats, for convenience */ #fmt = {}; + /** instance term plugins */ #term = Object.create(null); + /** instance values to complement static values */ #local = { + /** instance configuration */ config: {}, + /** instance parse rules (only populated if provided) */ parse: { result: [] } + }; + constructor(tempo, options = {}) { + this.#now = Temporal.Now.instant(); // stash current Instant + [this.#tempo, this.#options] = this.#swap(tempo, options); // swap arguments around, if arg1=Options or Temporal-like + this.#setLocal(this.#options); // parse the local options looking for overrides to Tempo.#global.config + // we now have all the info we need to instantiate a new Tempo + try { + this.#anchor = this.#options.anchor; + this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg + if (['iso8601', 'gregory'].includes(this.#local.config['calendar'])) { + for (const key of this.#local.config.formats.keys()) + Object.assign(this.#fmt, { [key]: this.format(key) }); + } + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) // add the plug-in getters for the pre-defined Terms to the instance + .forEach(({ key, scope, define }) => { + this.#setTerm(this, key, define, true); // add a getter which returns the key-field only + this.#setTerm(this, scope, define, false); // add a getter which returns a range-object + }); + if (isDefined(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending))) { // are we mutating with 'set()' ? + this.#local.parse.result.unshift(...__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending)); // prepend collected parse-matches + __classPrivateFieldSet(Tempo, _classThis, void 0, "f", _Tempo_pending); // and reset mutating-flag + } + secure(this.#fmt); // prevent mutations + secure(this.#term); // secure the initial object with getters + secure(this.#local.config); + secure(this.#local.parse); + } + catch (err) { + console.error('Tempo Constructor Error:', err); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.config, `Cannot create Tempo: ${err.message}\n${err.stack}`); + return {}; // return empty Object + } + } + // This function has be defined within the Tempo class (and not imported from another module) because it references a private-variable + /** this will add a getter on the instance #term private field */ + #setTerm(self, name, define, isKeyOnly) { + if (isDefined(name) && isDefined(define)) { + Object.defineProperty(self.#term, name, { + configurable: false, + enumerable: false, + get: function () { + const value = define.call(self, isKeyOnly); // evaluate the term range-lookup + self.#term = secure(Object.create(self.#term, { + [name]: { + value, + configurable: false, + writable: false, + enumerable: true + } + })); + return secure(value); + } + }); + } + } + // #endregion Constructor + // #region Instance public accessors~~~~~~~~~~~~~~~~~~~~~~ + /** 4-digit year (e.g., 2024) */ get yy() { return this.toDateTime().year; } + /** 4-digit ISO week-numbering year */ get wy() { return this.ww === 1 && this.mm === Tempo.MONTH.Dec ? this.yy + 1 : (this.ww >= 52 && this.mm === Tempo.MONTH.Jan ? this.yy - 1 : this.yy); } + /** Month number: Jan=1, Dec=12 */ get mm() { return this.toDateTime().month; } + /** ISO week number of the year */ get ww() { return this.toDateTime().weekOfYear; } + /** Day of the month (1-31) */ get dd() { return this.toDateTime().day; } + /** Day of the month (alias for `dd`) */ get day() { return this.toDateTime().day; } + /** Hour of the day (0-23) */ get hh() { return this.toDateTime().hour; } + /** Minutes of the hour (0-59) */ get mi() { return this.toDateTime().minute; } + /** Seconds of the minute (0-59) */ get ss() { return this.toDateTime().second; } + /** Milliseconds of the second (0-999) */ get ms() { return this.toDateTime().millisecond; } + /** Microseconds of the millisecond (0-999) */ get us() { return this.toDateTime().microsecond; } + /** Nanoseconds of the microsecond (0-999) */ get ns() { return this.toDateTime().nanosecond; } + /** Fractional seconds (e.g., 0.123456789) */ get ff() { return +(`0.${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`); } + /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz() { return this.toDateTime().timeZoneId; } + /** Unix timestamp (defaults to milliseconds) */ get ts() { return this.epoch[this.#local.config.timeStamp]; } + /** Short month name (e.g., 'Jan') */ get mmm() { return Tempo.MONTH.keyOf(this.#zdt.month); } + /** Full month name (e.g., 'January') */ get mon() { return Tempo.MONTHS.keyOf(this.#zdt.month); } + /** Short weekday name (e.g., 'Mon') */ get www() { return Tempo.WEEKDAY.keyOf(this.#zdt.dayOfWeek); } + /** Full weekday name (e.g., 'Monday') */ get wkd() { return Tempo.WEEKDAYS.keyOf(this.toDateTime().dayOfWeek); } + /** ISO weekday number: Mon=1, Sun=7 */ get dow() { return this.toDateTime().dayOfWeek; } + /** Nanoseconds since Unix epoch (BigInt) */ get nano() { return this.toDateTime().epochNanoseconds; } + /** current Tempo configuration */ + get config() { + return getProxy(omit({ ...this.#local.config }, 'scope', 'value', 'anchor')); + } + /** Instance-specific parse rules (merged with global) */ get parse() { return this.#local.parse; } + /** Object containing results from all term plugins */ get term() { return getProxy(this.#term); } + /** Formatted results for all pre-defined format codes */ get fmt() { return this.#fmt; } + /** units since epoch */ get epoch() { + return secure({ + /** seconds since epoch */ ss: Math.trunc(this.toDateTime().epochMilliseconds / 1_000), + /** milliseconds since epoch */ ms: this.toDateTime().epochMilliseconds, + /** microseconds since epoch */ us: Number(this.toDateTime().epochNanoseconds / BigInt(1_000)), + /** nanoseconds since epoch */ ns: this.toDateTime().epochNanoseconds, + }); + } + // #endregion Instance public accessors + // #region Instance private accessors + /** + * @Immutable class decorators wrap the class but leave internal lexical bindings pointing to the original, undecorated class. + * To ensure new instances returned by instance methods are properly frozen, + * we must instantiate internally from the decorated wrapper (which is bound to `this.constructor`) + * rather than using `new Tempo(..)`. + */ + get #Tempo() { return this.constructor; } + /** time duration until another date-time */ until(optsOrDate, optsOrUntil) { return this.#until(optsOrDate, optsOrUntil); } + /** time elapsed since another date-time */ since(optsOrDate, optsOrUntil) { return this.#since(optsOrDate, optsOrUntil); } + /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt) { return this.#format(fmt); } + /** returns a new `Tempo` with specific duration added. */ add(tempo, options) { return this.#add(tempo, options); } + /** returns a new `Tempo` with specific offsets. */ set(tempo, options) { return this.#set(tempo, options); } + /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config); } + /** returns the underlying Temporal.ZonedDateTime */ toDateTime() { return this.#zdt ?? this.#anchor ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone); } + /** returns a Temporal.PlainDate representation */ toPlainDate() { return this.toDateTime().toPlainDate(); } + /** returns a Temporal.PlainTime representation */ toPlainTime() { return this.toDateTime().toPlainTime(); } + /** returns a Temporal.PlainDateTime representation */ toPlainDateTime() { return this.toDateTime().toPlainDateTime(); } + /** returns the underlying Temporal.Instant */ toInstant() { return this.toDateTime().toInstant(); } + /** the date-time as a standard `Date` object. */ toDate() { return new Date(this.toDateTime().round({ smallestUnit: ELEMENT.ms }).epochMilliseconds); } + /** the ISO8601 string representation of the date-time. */ toString() { return this.toPlainDateTime().toString({ calendarName: 'never' }); } + /** Custom JSON serialization for `JSON.stringify`. */ toJSON() { return omit({ ...this.#local.config, value: this.toString() }, 'scope', 'store'); } + /** `true` if the underlying date-time is valid. */ isValid() { return !isEmpty(this); } + // #endregion Instance public methods + // #region Instance private methods~~~~~~~~~~~~~~~~~~~~~~~ + /** setup local 'config' and 'parse' rules (prototype-linked to global) */ + #setLocal(options) { + // setup local config (prototype-linked to global config) + this.#local.config = Object.create(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config); + Object.assign(this.#local.config, { scope: 'local' }); + // setup local parse rules (prototype-linked to global parse) + this.#local.parse = Object.create(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse); + this.#local.parse.result = []; + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, this.#local, options); // set #local config + } + /** parse DateTime input */ + #parse(tempo, dateTime) { + const today = (dateTime ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone)) + .withTimeZone(this.#local.config.timeZone); + const { type, value } = this.#conform(tempo, today, isDefined(dateTime)); + // evaluate latest timezone / calendar (after #conform which might have updated them) + const { timeZone, calendar } = this.#local.config; + const tz = isString(timeZone) ? timeZone : timeZone.id ?? timeZone.timeZoneId; + const cal = isString(calendar) ? calendar : calendar.id ?? calendar.calendarId; + if (isEmpty(this.#local.parse.result) && isUndefined(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending))) // #conform() didn't find any matches + this.#local.parse.result = [{ type, value }]; + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'parse', `{type: ${type}, value: ${value}}`); // show what we're parsing + switch (type) { + case 'Null': + case 'Void': + case 'Empty': + case 'Undefined': + return today; + case 'String': // String which didn't conform to a Tempo.pattern + try { + const str = value.replace(/Z$/, ''); // requested Z-stripping for adoption + const zdt = Temporal.ZonedDateTime.from(str.includes('[') ? str : `${str}[${tz}]`); + if (this.#local) + this.#local.config.timeZone = zdt.timeZoneId; + return zdt; + } + catch (err) { // else see if Date.parse can parse value + this.#result({ type: 'String', value }, { match: 'Date.parse' }); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, 'Cannot detect DateTime; fallback to Date.parse'); + if (Match.date.test(value)) { + try { + return Temporal.PlainDate.from(value).toZonedDateTime(tz).withCalendar(cal); + } + catch { /* ignore and fallback */ } + } + try { + return Temporal.PlainDateTime.from(value).toZonedDateTime(tz).withCalendar(cal); + } + catch { /* ignore and fallback to Date.parse */ } + const date = new Date(value.toString()); + if (isNaN(date.getTime())) + return __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Cannot parse Date: "${value}"`); + return Temporal.ZonedDateTime // adopt instance timezone + .from(`${date.toISOString().substring(0, 23)}[${tz}]`) + .withCalendar(cal); + } + case 'Temporal.ZonedDateTime': // ZonedDateTime object: convert to instance timezone + return (value.timeZoneId === tz && value.calendarId === cal) + ? value + : value.withTimeZone(tz).withCalendar(cal); + case 'Temporal.PlainDate': + case 'Temporal.PlainDateTime': + return value + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.PlainTime': + return today.withPlainTime(value); + case 'Temporal.PlainYearMonth': // assume current day, else end-of-month + return value + .toPlainDate({ day: Math.min(today.day, value.daysInMonth) }) + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.PlainMonthDay': // assume current year + return value + .toPlainDate({ year: today.year }) + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.Instant': + return value + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'Tempo': + return value + .toDateTime() + .withTimeZone(tz) + .withCalendar(cal); // apply instance timezone to cloned Tempo + case 'Date': + return Temporal.Instant.fromEpochMilliseconds(value.getTime()) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'Number': // Number which didn't conform to a Tempo.pattern + const [seconds = BigInt(0), suffix = BigInt(0)] = value.toString().split('.').map(BigInt); + const nano = BigInt(suffix.toString().substring(0, 9).padEnd(9, '0')); + return Temporal.Instant.fromEpochNanoseconds(seconds * BigInt(1_000_000_000) + nano) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'BigInt': // BigInt is not conformed against a Tempo.pattern + return Temporal.Instant.fromEpochNanoseconds(value) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected Tempo parameter type: ${type}, ${String(value)}`); + return today; + } + } + /** resolve constructor / method arguments */ + #swap(tempo, options = {}) { + return this.#isOptions(tempo) + ? [tempo.value, { ...tempo }] + : [tempo, { ...options }]; + } + /** check if we've been given a Tempo Options object */ + #isOptions(arg) { + if (!isObject(arg) || arg.constructor !== Object) + return false; + const keys = ownKeys(arg); // if it contains any 'mutation' keys, then it's not (just) an options object + if (keys.some(key => MUTATION.has(key))) + return false; + return keys + .some(key => OPTION.has(key)); + } + /** check if we've been given a ZonedDateTimeLike object */ + #isZonedDateTimeLike(tempo) { + if (!isObject(tempo) || isEmpty(tempo)) + return false; + // if it contains any 'options' keys, it's not a ZonedDateTime + const keys = ownKeys(tempo); + if (keys.some(key => OPTION.has(key) && key !== 'value')) + return false; + // we include {value} to allow for Tempo instances + return keys + .filter(isString) + .every((key) => ZONED_DATE_TIME.has(key)); + } + #result(...rest) { + const match = Object.assign({}, ...rest); // collect all object arguments + if (!isEmpty(match.groups)) { + if (isDefined(this.#anchor) && !match.isAnchored) + match.isAnchored = true; + (__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending) ?? this.#local.parse.result).push(match); + } + } + /** evaluate 'string | number' input against known patterns */ + #conform(tempo, dateTime, isAnchored = false) { + const arg = asType(tempo); + const { type, value } = arg; + if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property) + const { timeZone, calendar, value, ...options } = tempo; + let zdt = !isEmpty(options) + ? dateTime.with({ ...options }) + : dateTime; + if (timeZone) + zdt = zdt.withTimeZone(timeZone); // optionally set timeZone + if (calendar) + zdt = zdt.withCalendar(calendar); // optionally set calendar + this.#result({ type: 'Temporal.ZonedDateTimeLike', value: zdt, match: 'Temporal.ZonedDateTimeLike' }); + return Object.assign(arg, { + type: 'Temporal.ZonedDateTime', // override {arg.type} + value: zdt, + }); + } + if (type !== 'String' && type !== 'Number') { + this.#result(arg, { match: type }); + return arg; + } + if (isFunction(value)) { + const res = value.call(this); + return this.#conform(res, dateTime, isAnchored); + } + const trim = trimAll(value); + if (type === 'String') { // if original value is String + if (isEmpty(trim)) { // don't conform empty string + this.#result(arg, { match: 'Empty' }); + return Object.assign(arg, { type: 'Empty' }); + } + if (isIntegerLike(trim)) { // if string representation of BigInt literal + this.#result(arg, { match: 'BigInt' }); + return Object.assign(arg, { type: 'BigInt', value: asInteger(trim) }); + } + } + else { // else it is a Number + if (trim.length <= 7) { // cannot reliably interpret small numbers: might be {ss} or {yymmdd} or {dmmyyyy} + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, 'Cannot safely interpret number with less than 8-digits: use string instead'); + return arg; + } + } + // const isSimpleIsoOrNumeric = typeof value === 'string' && (Match.date.test(value) || /^\d+$/.test(value)); + const map = this.#local.parse.pattern; + for (const [sym, pat] of map) { + const groups = this.#parseMatch(pat, trim); // determine pattern-match groups + if (isEmpty(groups)) + continue; // no match, so skip this iteration + this.#result(arg, { match: sym.description, groups: cleanify(groups) }); // stash the {key} of the pattern that was matched + dateTime = this.#parseZone(groups, dateTime); // resolve timezone early so events can use it + dateTime = this.#parseGroups(groups, dateTime); // mutate the {groups} object (resolves events/periods) + dateTime = this.#parseWeekday(groups, dateTime); // if {weekDay} pattern, calculate a calendar value + dateTime = this.#parseDate(groups, dateTime); // if {calendar}|{event} pattern, translate to date value + dateTime = this.#parseTime(groups, dateTime); // if {clock}|{period} pattern, translate to a time value + /** + * finished analyzing a matched pattern. + * rebuild {arg.value} into a ZonedDateTime + */ + // if no time-components were matched, strip time to midnight baseline + if (!isAnchored && !['hh', 'mi', 'ss', 'ff', 'mer', 'per'].some(key => isDefined(groups[key]))) + dateTime = dateTime.withPlainTime('00:00:00'); + Object.assign(arg, { type: 'Temporal.ZonedDateTime', value: dateTime }); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'groups', groups); // show the resolved date-time elements + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'pattern', sym.description); // show the pattern that was matched + break; // stop checking patterns + } + return arg; + } + /** apply a regex-match against a value, and clean the result */ + #parseMatch(pat, value) { + const groups = value.toString().match(pat)?.groups || {}; + ownEntries(groups) // remove undefined, NaN, null and empty values + .forEach(([key, val]) => isEmpty(val) && delete groups[key]); + return groups; + } + /** resolve {event} | {period} to their date | time values (mutates groups) */ + #parseGroups(groups, dateTime) { + this.#anchor = dateTime; // temporarily anchor the instance so events resolve relative to current state + try { + for (const key of ownKeys(groups)) { + const isEvent = Match.event.test(key); + const isPeriod = Match.period.test(key); + if (!isEvent && !isPeriod) + continue; + const idx = +key.substring(4); + const src = key.startsWith('g') ? (isEvent ? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.event : __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.period) : (isEvent ? this.#local.parse.event : this.#local.parse.period); + const entry = ownEntries(src, true)[idx]; + if (!entry) + continue; + const definition = entry[1]; + const res = isFunction(definition) ? definition.call(this).toString() : definition; + const resGroups = isEvent ? this.#parseEvent(res) : this.#parsePeriod(res); + Object.assign(groups, resGroups); + delete groups[key]; + } + } + finally { + this.#anchor = void 0; // reset anchor + } + // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date) + if (isDefined(groups["mm"]) && !isNumeric(groups["mm"])) { + const mm = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_prefix).call(Tempo, groups["mm"]); // conform month-name + groups["mm"] = Tempo.MONTH.keys().findIndex((el) => el === mm).toString().padStart(2, '0'); + } + // Apply mutated groups to dateTime + if (isDefined(groups.yy) || isDefined(groups.mm) || isDefined(groups.dd)) + dateTime = this.#parseDate(groups, dateTime); + if (isDefined(groups.hh) || isDefined(groups.mi) || isDefined(groups.ss) || isDefined(groups.ff) || isDefined(groups.mer)) + dateTime = this.#parseTime(groups, dateTime); + return dateTime; + } + /** + * We expect similar offset-logic to apply to 'modifiers' when parsing a string DateTime. + * returns {adjust} to make, based on {modifier}, {offset}, and {period} + * - previous period + * + next period + * -3 three periods ago + * < prior to base-date (asIs) + * <= prior to base-date (plus one) + */ + #parseModifier({ mod, adjust, offset, period }) { + adjust = Math.abs(adjust); + switch (mod) { + case void 0: // no adjustment + case '=': + case 'this': // current period + return 0; + case '+': // next period + case 'next': + return adjust; + case '-': // previous period + case 'prev': + case 'last': + return -adjust; + case '<': // period before base-date + case 'ago': + return (period <= offset) + ? -adjust + : -(adjust - 1); + case '<=': // period before or including base-date + return (period < offset) + ? -adjust + : -(adjust - 1); + case '>': // period after base-date + case 'hence': + return (period > offset) + ? adjust + : (adjust - 1); + case '>=': // period after or including base-date + case '+=': + return (period >= offset) + ? adjust + : (adjust - 1); + default: // unexpected modifier + return 0; + } + } + /** + * if named-group 'wkd' detected (with optional 'mod', 'nbr', 'sfx' or time-units), then calc relative weekday offset + * | Example | Result | Note | + * | :--- | :---- | :---- | + * | `Wed` | Wed this week | might be earlier or later or equal to current day | + * | `-Wed` | Wed last week | same as new Tempo('Wed').add({ weeks: -1 }) | + * | `+Wed` | Wed next week | same as new Tempo('Wed').add({ weeks: 1 }) | + * | `-3Wed` | Wed three weeks ago | same as new Tempo('Wed').add({ weeks: -3 }) | + * | `', hh: '10', mer: 'pm'} + * we early-exit if we find anything other than time-units + */ + const time = ['hh', 'mi', 'ss', 'ms', 'us', 'ns', 'ff', 'mer']; + if (!ownKeys(rest) + .every(key => time.includes(key))) // non 'time-unit' keys detected + return dateTime; // this is not a true {weekDay} pattern, so early-exit + if (!isEmpty(mod) && !isEmpty(sfx)) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${sfx}'`); + return dateTime; // cannot provide both 'modifier' and 'suffix' + } + const weekday = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_prefix).call(Tempo, wkd); // conform weekday-name + const adjust = +nbr; // how many weeks to adjust + const offset = Tempo.WEEKDAY.keys() // how far weekday is from today + .findIndex((el) => el === weekday); + const days = offset - dateTime.dayOfWeek // number of days to offset from dateTime + + (this.#parseModifier({ mod: mod ?? sfx, adjust, offset, period: dateTime.dayOfWeek }) * dateTime.daysInWeek); + delete groups["wkd"]; + delete groups["mod"]; + delete groups["nbr"]; + delete groups["sfx"]; + return dateTime + .add({ days }); // set new {day} + } + /** + * match input against date patterns + * @returns adjusted ZonedDateTime with resolved time-components + */ + #parseDate(groups, dateTime) { + const { mod, nbr = '1', afx, unt, yy, mm, dd } = groups; + if (isEmpty(yy) && isEmpty(mm) && isEmpty(dd) && isUndefined(unt)) + return dateTime; // return default + if (!isEmpty(mod) && !isEmpty(afx)) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${afx}'`); + return dateTime; + } + let { year, month, day } = this.#num({ + year: yy ?? dateTime.year, // supplied year, else current year + month: mm ?? dateTime.month, // supplied month, else current month + day: dd ?? dateTime.day, // supplied day, else current day + }); + // handle {unt} relative offset (e.g. '2 days ago') + if (unt) { + const adjust = +nbr; + const direction = (mod === '<' || mod === '-' || afx === 'ago') ? -1 : 1; + const plural = singular(unt) + 's'; + dateTime = dateTime.add({ [plural]: adjust * direction }); + delete groups["unt"]; + delete groups["nbr"]; + delete groups["afx"]; + delete groups["mod"]; + return dateTime; + } + // convert 2-digit year to 4-digits using 'pivot-year' (relative to current century) + if (year.toString().match(Match.twoDigit)) { // if {year} match just-two digits + const pivot = dateTime + .subtract({ years: this.#local.parse["pivot"] }) // pivot cutoff to determine century + .year % 100; // remainder + const century = Math.trunc(dateTime.year / 100); // current century + year += (century - Number(year >= pivot)) * 100; // now a four-digit year + } + // adjust the {year} if a Modifier is present + const adjust = +nbr; // how many years to adjust + const offset = Number(pad(month) + '.' + pad(day)); // the event month.day + const period = Number(pad(dateTime.month) + '.' + pad(dateTime.day + 1)); + year += this.#parseModifier({ mod: mod ?? afx, adjust, offset, period }); + Object.assign(groups, { yy: year, mm: month, dd: day }); + delete groups["mod"]; + delete groups["nbr"]; + delete groups["afx"]; + // all date-components are now set; check for overflow in case past end-of-month + return Temporal.PlainDate.from({ year, month, day }, { overflow: 'constrain' }) + .toZonedDateTime(dateTime.timeZoneId) // adjust to constrained date + .withPlainTime(dateTime.toPlainTime()); // restore the time + } + /** match input against 'tm' pattern (returns adjusted ZonedDateTime) */ + #parseTime(groups = {}, dateTime) { + if (isUndefined(groups["hh"])) // must contain 'time' with at least {hh} + return dateTime; + let { hh = 0, mi = 0, ss = 0, ms = 0, us = 0, ns = 0 } = this.#num(groups); + if (hh >= 24) { + dateTime = dateTime.add({ days: Math.trunc(hh / 24) }); // move the date forward number of days to offset + hh %= 24; // midnight is '00:00' on the next-day + } + if (isDefined(groups["ff"])) { // {ff} is fractional seconds and overrides {ms|us|ns} + const ff = groups["ff"].substring(0, 9).padEnd(9, '0'); + ms = +ff.substring(0, 3); + us = +ff.substring(3, 6); + ns = +ff.substring(6, 9); + } + if (groups["mer"]?.toLowerCase() === 'pm' && hh < 12 && (hh + mi + ss + ms + us + ns) > 0) + hh += 12; // anything after midnight and before midday + if (groups["mer"]?.toLowerCase() === 'am' && hh >= 12) + hh -= 12; // anything after midday + return dateTime // return the computed time-values + .withPlainTime({ hour: hh, minute: mi, second: ss, millisecond: ms, microsecond: us, nanosecond: ns }); + } + /** + * apply a timezone or calendar bracket to the current ZonedDateTime + * normalization is applied to ensure 'Z' is treated as 'UTC' + */ + #parseZone(groups, dateTime) { + const tzd = groups["tzd"]?.replace(Match.zed, 'UTC'); // normalize timezone/offset + const brk = groups["brk"]?.replace(Match.zed, 'UTC'); // handle bracketed timezone + const zone = brk || tzd; + if (zone && zone !== dateTime.timeZoneId && !zone.startsWith('u-ca=')) { + if (this.#local) + this.#local.config.timeZone = zone; // update local config if exists + dateTime = dateTime.toPlainDateTime().toZonedDateTime(zone); // adopt timezone override (stable) + } + const cal = groups["cal"]; + if (cal && cal !== dateTime.calendarId) { + const calendar = cal.startsWith('u-ca=') ? cal.substring(5) : cal; + this.#local.config.calendar = calendar; + dateTime = dateTime.withCalendar(calendar); + } + delete groups["brk"]; + delete groups["cal"]; + delete groups["tzd"]; + return dateTime; + } + /** match an {event} string against a date pattern */ + #parseEvent(evt) { + const groups = {}; + const pats = this.#local.parse.isMonthDay // first find out if we have a US-format timeZone + ? ['mdy', 'dmy', 'ymd'] // if so, try {mdy} before {dmy} + : ['dmy', 'mdy', 'ymd']; // else try {dmy} before {mdy} + for (const pat of pats) { + const reg = this.#getPattern(pat); + if (isDefined(reg)) { + const match = this.#parseMatch(reg, evt); + if (!isEmpty(match)) { + this.#result({ type: 'Event', value: evt, match: pat, groups: cleanify(match) }); + Object.assign(groups, match); + } + } + if (!isEmpty(groups)) + break; // return on the first matched pattern + } + return groups; // overlay the match date-components + } + /** match a {period} string against the time pattern */ + #parsePeriod(per) { + const groups = {}; + const tm = this.#getPattern('tm'); // get the RegExp for the time-pattern + if (isDefined(tm)) { + const match = this.#parseMatch(tm, per); + if (!isEmpty(match)) { + this.#result({ type: 'Period', value: per, match: 'tm', groups: cleanify(match) }); + Object.assign(groups, match); + } + } + return groups; + } + /** lookup the RegExp for a given pattern name */ + #getPattern(pat) { + const reg = this.#local.parse.pattern.get(Tempo.getSymbol(pat)); + if (isUndefined(reg)) + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Cannot find pattern: "${pat}"`); + return reg; + } + /** return a new object, with only numeric values */ + #num = (groups) => { + return ownEntries(groups) + .reduce((acc, [key, val]) => { + if (isNumeric(val)) + acc[key] = asNumber(val); + return acc; + }, {}); + }; + /** mutate the date-time by adding a duration */ + #add = (args, options = {}) => { + var _b; + const tz = options.timeZone ?? this.tz; + let zdt = this.#zdt.withTimeZone(tz); + const overrides = { + timeZone: tz, + calendar: this.#zdt.calendarId + }; + __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, "f", _Tempo_pending) ?? [...this.#local.parse.result], "f", _Tempo_pending); // collected parse-results so-far + if (isDefined(args)) { + if (isObject(args) && args.constructor === Object) { + const mutate = 'add'; + zdt = Object.entries(args ?? {}) // loop through each mutation + .reduce((zdt, [unit, offset]) => { + if (unit === 'timeZone' || unit === 'calendar') + return zdt; + const single = singular(unit); + const plural = single + 's'; + switch (`${mutate}.${single}`) { + case 'add.year': + case 'add.month': + case 'add.week': + case 'add.day': + case 'add.hour': + case 'add.minute': + case 'add.second': + case 'add.millisecond': + case 'add.microsecond': + case 'add.nanosecond': + return zdt + .add({ [plural]: offset }); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`); + return zdt; + } + }, zdt); + } + else { + return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt }); + } + } + return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt }); + }; + /** mutate the date-time by setting specific offsets */ + #set = (args, options = {}) => { + var _b; + const tz = options.timeZone ?? this.tz; + let zdt = this.#zdt.withTimeZone(tz); + const overrides = { + timeZone: tz, + calendar: this.#zdt.calendarId + }; + __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, "f", _Tempo_pending) ?? [...this.#local.parse.result], "f", _Tempo_pending); // collected parse-results so-far + if (isDefined(args)) { + if (isObject(args) && args.constructor === Object) { + if (args.timeZone) + overrides.timeZone = args.timeZone; + if (args.calendar) + overrides.calendar = args.calendar; + zdt = Object.entries(args ?? {}) // loop through each mutation + .reduce((zdt, [key, adjust]) => { + if (key === 'timeZone' || key === 'calendar') + return zdt; + const { mutate, offset, single } = ((key) => { + switch (key) { + case 'start': + case 'mid': + case 'end': + return { mutate: key, offset: 0, single: singular(adjust?.toString() ?? '') }; + default: + return { mutate: 'set', offset: adjust, single: singular(key) }; + } + })(key); // IIFE to analyze arguments + switch (`${mutate}.${single}`) { + case 'set.timeZone': + return zdt.withTimeZone(offset); + case 'set.calendar': + return zdt.withCalendar(offset); + case 'set.period': + case 'set.time': + case 'set.date': + case 'set.event': + case 'set.dow': // set day-of-week by number + case 'set.wkd': // set day-of-week by name + return this.#parse(offset, zdt); + case 'set.year': + case 'set.month': + // case 'set.week': // not defined + case 'set.day': + case 'set.hour': + case 'set.minute': + case 'set.second': + case 'set.millisecond': + case 'set.microsecond': + case 'set.nanosecond': + return zdt + .with({ [single]: offset }); + case 'set.yy': + case 'set.mm': + // case 'set.ww': // not defined + case 'set.dd': + case 'set.hh': + case 'set.mi': + case 'set.ss': + case 'set.ms': + case 'set.us': + case 'set.ns': + const value = Tempo.ELEMENT[single]; + return zdt + .with({ [value]: offset }); + case 'start.year': + return zdt + .with({ month: Tempo.MONTH.Jan, day: 1 }) + .startOfDay(); + case 'start.term': // TODO + return zdt; + case 'start.month': + return zdt + .with({ day: 1 }) + .startOfDay(); + case 'start.week': + return zdt + .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) }) + .startOfDay(); + case 'start.day': + return zdt + .startOfDay(); + case 'start.hour': + case 'start.minute': + case 'start.second': + return zdt + .round({ smallestUnit: offset, roundingMode: 'trunc' }); + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + case 'mid.year': + return zdt + .with({ month: Tempo.MONTH.Jul, day: 1 }) + .startOfDay(); + case 'mid.term': // TODO: relevant? + return zdt; + case 'mid.month': + return zdt + .with({ day: Math.trunc(zdt.daysInMonth / 2) }) + .startOfDay(); + case 'mid.week': + return zdt + .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) }) + .startOfDay(); + case 'mid.day': + return zdt + .round({ smallestUnit: 'day', roundingMode: 'trunc' }) + .add({ hours: 12 }); + case 'mid.hour': + return zdt + .round({ smallestUnit: 'hour', roundingMode: 'trunc' }) + .add({ minutes: 30 }); + case 'mid.minute': + return zdt + .round({ smallestUnit: 'minute', roundingMode: 'trunc' }) + .add({ seconds: 30 }); + case 'mid.second': + return zdt + .round({ smallestUnit: 'second', roundingMode: 'trunc' }) + .add({ milliseconds: 500 }); + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + case 'end.year': + return zdt + .add({ years: 1 }) + .with({ month: Tempo.MONTH.Jan, day: 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.term': // TODO + return zdt + .subtract({ nanoseconds: 1 }); + case 'end.month': + return zdt + .add({ months: 1 }) + .with({ day: 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.week': + return zdt + .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.day': + case 'end.hour': + case 'end.minute': + case 'end.second': + return zdt + .round({ smallestUnit: offset, roundingMode: 'ceil' }) + .subtract({ nanoseconds: 1 }); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`); + return zdt; + } + }, zdt); // start reduce with the shifted zonedDateTime + } + else { + return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt }); + } + } + return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt }); + }; + #format = (fmt) => { + if (isNull(this.#tempo)) + return undefined; // don't format dates + const obj = this.#local.config.formats; + let template = (isString(fmt) && obj.has(fmt)) + ? obj[fmt] + : String(fmt); + // auto-meridiem: if {HH} is present and {mer} is absent, append it after the last time component + if (template.includes('{HH}') && !template.includes('{mer}') && !template.includes('{MER}')) { + const index = Math.max(template.lastIndexOf('{HH}'), template.lastIndexOf('{mi}'), template.lastIndexOf('{ss}')); + if (index !== -1) { + const end = template.indexOf('}', index) + 1; + template = template.slice(0, end) + '{mer}' + template.slice(end); + } + } + const result = template.replace(Match.braces, (_match, token) => { + switch (token) { + case 'wy': return pad(this.wy, 4); + case 'yyww': return pad(this.wy, 4) + pad(this.ww); + case 'yyyy': return pad(this.yy, 4); + case 'yy': return pad(this.yy % 100); + case 'mon': return this.mon; + case 'mmm': return this.mmm; + case 'mm': return pad(this.mm); + case 'dd': return pad(this.dd); + case 'day': return this.day.toString(); + case 'dow': return this.dow.toString(); + case 'wkd': return this.wkd; + case 'www': return this.www; + case 'ww': return pad(this.ww); + case 'hh': return pad(this.hh); + case 'HH': return pad(this.hh > 12 ? this.hh % 12 : this.hh || 12); + case 'mer': return this.hh >= 12 ? 'pm' : 'am'; + case 'MER': return this.hh >= 12 ? 'PM' : 'AM'; + case 'mi': return pad(this.mi); + case 'ss': return pad(this.ss); + case 'ms': return pad(this.ms, 3); + case 'us': return pad(this.us, 3); + case 'ns': return pad(this.ns, 3); + case 'ff': return `${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`; + case 'hhmiss': return `${pad(this.hh)}${pad(this.mi)}${pad(this.ss)}`; + case 'ts': return this.ts.toString(); + case 'nano': return this.nano.toString(); + case 'tz': return this.tz; + default: { + return token.startsWith('term.') + ? stringify(this.term[token.slice(5)]) + : `{${token}}`; // unknown format-code, return as-is + } + } + }); + const isExplicitlyNumeric = ['{yyyy}{ww}', '{yyyy}{mm}', '{yyyy}{mm}{dd}', '{yyww}', '{wy}{ww}', '{wy}'].includes(template); + return (isExplicitlyNumeric ? ifNumeric(result) : result); + }; + #until(arg, until = {}, since = false) { + let value, opts = {}, unit; + switch (true) { + case isString(arg) && Tempo.ELEMENT.includes(singular(arg)): + unit = arg; // e.g. tempo.until('hours') + ({ value, ...opts } = until); + break; + case isString(arg): // assume 'arg' is a dateTime string + value = arg; // e.g. tempo.until('20-May-1957', {unit: 'years'}) + if (isObject(until)) + ({ unit, ...opts } = until); + else + unit = until; // assume the 'until' arg is a 'unit' string + break; + case isObject(arg) && isString(until): // assume 'until' is a Unit + unit = until; // e.g. tempo.until({value:'20-May-1957}, 'years'}) + ({ value, ...opts } = arg); + break; + case isObject(arg) && isObject(until): // assume combination of Tempo.Options and Tempo.Until + ({ value, unit, ...opts } = Object.assign({}, arg, until)); + break; + case isString(until): + unit = until; + value = arg; + break; + case isObject(until): + unit = until.unit; + value = arg; + break; + default: + value = arg; // assume 'arg' is a DateTime + } + const offset = new this.#Tempo(value, opts); // create the offset Tempo + const diffZone = this.#zdt.timeZoneId !== offset.#zdt.timeZoneId; + // Temporal restricts cross-timezone math to absolute units ('hours') to avoid DST ambiguity + const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') }); + if (isDefined(unit)) + unit = `${singular(unit)}s`; // coerce to plural + return (isUndefined(unit) || since) // if no 'unit' provided, or if called via #since() + ? getAccessors(duration) // return an Object with all the duration accessors + .reduce((acc, dur) => Object.assign(acc, { [dur]: duration[dur] }), ifDefined({ iso: duration.toString(), unit })) + : duration.total({ relativeTo: this.#zdt, unit }); // sum-up the duration components + } + /** format the elapsed time between two Tempos (to nanosecond) */ + #since(arg, until = {}) { + const dur = this.#until(arg, until, true); // get a Tempo.Duration object + const date = [dur.years, dur.months, dur.days]; + const time = [dur.hours, dur.minutes, dur.seconds]; + const fraction = [dur.milliseconds, dur.microseconds, dur.nanoseconds] + .map(Math.abs) + .map(nbr => nbr.toString().padStart(3, '0')) + .join(''); + const rtf = new Intl.RelativeTimeFormat(this.#local.config['locale'], { style: 'narrow' }); + switch (dur.unit) { + case 'years': + return rtf.format(date[0], 'years'); + case 'months': + return rtf.format(date[1], 'months'); + case 'weeks': + return rtf.format(date[1], 'weeks'); + case 'days': + return rtf.format(date[2], 'days'); + case 'hours': + return rtf.format(time[0], 'hours'); + case 'minutes': + return rtf.format(time[1], 'minutes'); + case 'seconds': + return rtf.format(time[2], 'seconds'); + case 'milliseconds': + case 'microseconds': + case 'nanoseconds': + return `${fraction}`; + default: + return dur.iso; + } + } + static { + __runInitializers(_classThis, _classExtraInitializers); + } + }; + return Tempo = _classThis; + })(); + // #endregion Namespace + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Tempo.init(); // initialize default global configuration + // shortcut functions to common Tempo properties / methods + /** check valid Tempo */ const isTempo = (tempo) => isType(tempo, 'Tempo'); + /** current timestamp (ts) */ const getStamp = ((tempo, options) => new Tempo(tempo, options).ts); + /** create new Tempo */ const getTempo = ((tempo, options) => new Tempo(tempo, options)); + /** format a Tempo */ const fmtTempo = ((fmt, tempo, options) => new Tempo(tempo, options).format(fmt)); + + /** + * Wrap a Promise's resolve/reject/finally methods for later fulfilment. + * with useful methods for tracking the state of the Promise, chaining fulfilment, etc. + ``` + new Pledge({tag: string, onResolve?: () => void, onReject?: () => void, onSettle?: () => void}) + new Pledge(tag?: string) + ``` + */ + let Pledge = (() => { + var _Pledge_static; + let _classDecorators = [Immutable]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + var Pledge = class { + static { _classThis = this; } + static { __setFunctionName(this, "Pledge"); } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + Pledge = _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + } + #pledge; + #status = {}; + #dbg; + static { + _Pledge_static = { value: {} }; + } + static STATE = secure({ + Pending: Symbol('pending'), + Resolved: Symbol('resolved'), + Rejected: Symbol('rejected') + }); + /** initialize future Pledge instances */ + static init(arg) { + if (isObject(arg)) { + if (isEmpty(arg)) + __classPrivateFieldSet(Pledge, _classThis, {}, "f", _Pledge_static); // reset static values + Object.assign(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }), ifDefined({ onResolve: arg.onResolve, onReject: arg.onReject, onSettle: arg.onSettle, })); + } + else { + Object.assign(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static), ifDefined({ tag: arg, })); + } + if (__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).debug) + console.log('Pledge: ', __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static)); // debug + return Pledge.status; + } + /** reset static defaults */ + static [Symbol.dispose]() { Pledge.init({}); } + static get status() { + return __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static); + } + /** use catch:boolean to determine whether to throw or return */ + #catch(...msg) { + if (this.status.catch) { + this.#dbg.warn(...msg); // catch, but warn {error} + return; + } + this.#dbg.error(...msg); // assume {error} + throw new Error(sprintf('pledge: ', ...msg)); + } + constructor(arg) { + this.#pledge = Promise.withResolvers(); + this.#status = { state: Pledge.STATE.Pending, ...__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static) }; + if (isObject(arg)) { + this.#dbg = new Logify({ debug: arg.debug, catch: arg.catch }); + Object.assign(this.#status, ifDefined({ tag: __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).tag, debug: __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).debug, catch: __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).catch }), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, })); + const onResolve = asArray(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).onResolve).concat(asArray(arg.onResolve)); + const onReject = asArray(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).onReject).concat(asArray(arg.onReject)); + const onSettle = asArray(__classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).onSettle).concat(asArray(arg.onSettle)); + if (onResolve.length) + this.#pledge.promise.then(val => onResolve.forEach(cb => cb(val))); + if (onReject.length) + this.#pledge.promise.catch(err => onReject.forEach(cb => cb(err))); + if (onSettle.length) + this.#pledge.promise.finally(() => onSettle.forEach(cb => cb())); + if (this.#status.catch) + this.#pledge.promise.catch(err => this.#catch(this.#status, err)); + } + else { + this.#dbg = new Logify(); + Object.assign(this.#status, ifDefined({ tag: arg ?? __classPrivateFieldGet(Pledge, _classThis, "f", _Pledge_static).tag, })); + } + this.#pledge.promise.catch(() => { }); // global catch-all to prevent unhandled rejections + Object.freeze(this); // make this instance immutable + } + get [Symbol.toStringTag]() { + return 'Pledge'; + } + [Symbol.dispose]() { + if (this.isPending) + this.reject(new Error(`Pledge disposed`)); // discard pending Pledge (to notify wait-ers) + } + get status() { + return cleanify(this.#status); + } + get promise() { + return this.#pledge.promise; + } + get state() { + return this.#status.state.description; + } + get isPending() { + return this.#status.state === Pledge.STATE.Pending; + } + get isResolved() { + return this.#status.state === Pledge.STATE.Resolved; + } + get isRejected() { + return this.#status.state === Pledge.STATE.Rejected; + } + get isSettled() { + return this.#status.state !== Pledge.STATE.Pending; + } + toString() { + return JSON.stringify(this.status); + } + resolve(value) { + if (this.isPending) { + this.#status.settled = value; + this.#status.state = Pledge.STATE.Resolved; + this.#pledge.resolve(value); // resolve, then trigger any Pledge.onResolve, then Pledge.onSettle + } + else + this.#dbg.warn(this.#status, `Pledge was already ${this.state}`); + return this.#pledge.promise; + } + reject(error) { + if (this.isPending) { + this.#status.error = error; + this.#status.state = Pledge.STATE.Rejected; + this.#pledge.reject(error); // reject, then trigger any Pledge.onReject, then Pledge.onSettle + } + else + this.#dbg.warn(this.#status, `Pledge was already ${this.state}`); + return this.#pledge.promise; + } + then(fn) { + } + static { + __runInitializers(_classThis, _classExtraInitializers); + } + }; + return Pledge = _classThis; + })(); + + exports.$Tempo = $Tempo; + exports.Enumify = Enumify; + exports.Pledge = Pledge; + exports.Registry = Registry; + exports.Tempo = Tempo; + exports.cleanify = cleanify; + exports.clone = clone; + exports.cloneify = cloneify; + exports.enumify = enumify; + exports.enums = tempo_enum; + exports.fmtTempo = fmtTempo; + exports.getStamp = getStamp; + exports.getTempo = getTempo; + exports.isTempo = isTempo; + exports.objectify = objectify; + exports.stringify = stringify; + +})); +//# sourceMappingURL=tempo.bundle.js.map diff --git a/packages/tempo/dist/tempo.bundle.js.map b/packages/tempo/dist/tempo.bundle.js.map new file mode 100644 index 00000000..38636573 --- /dev/null +++ b/packages/tempo/dist/tempo.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tempo.bundle.js","sources":["temporal.polyfill.js","../../../node_modules/tslib/tslib.es6.mjs","../../shared/dist/type.library.js","../../shared/dist/reflection.library.js","../../shared/dist/utility.library.js","../../shared/dist/function.library.js","../../shared/dist/serialize.library.js","../../shared/dist/class.library.js","../../shared/dist/logify.class.js","../../shared/dist/object.library.js","../../shared/dist/coercion.library.js","../../shared/dist/storage.library.js","../../shared/dist/proxy.library.js","../../shared/dist/string.library.js","../../shared/dist/enumerate.library.js","tempo.config/tempo.enum.js","tempo.config/terms/term.utils.js","tempo.config/terms/term.quarter.js","tempo.config/terms/term.season.js","tempo.config/terms/term.zodiac.js","tempo.config/terms/term.timeline.js","tempo.config/terms/term.import.js","tempo.config/tempo.default.js","../../shared/dist/array.library.js","../../shared/dist/prototype.library.js","tempo.class.js","../../shared/dist/pledge.class.js"],"sourcesContent":["/**\n * This file verifies native Temporal API support.\n * Tempo requires an environment with native Temporal support or a user-provided polyfill.\n */\n// @ts-ignore\nif (!globalThis.Temporal) {\n const message = `\n[Tempo] Temporal API not found.\nThis library requires the ECMAScript Temporal API. Please ensure your environment \nsupports it natively (Node.js 20+, modern browsers) or provide your own polyfill.\n\nTo add a polyfill to your project:\n1. Install: npm install @js-temporal/polyfill\n2. Import at your entry point: import '@js-temporal/polyfill';\n`;\n console.error(message);\n throw new Error('Temporal API not found.');\n}\nexport {};\n//# sourceMappingURL=temporal.polyfill.js.map","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","/** the primitive type reported by toStringTag() */\nconst protoType = (obj) => Object.prototype.toString.call(obj).slice(8, -1);\n/**\n * return an object's type as a ProperCase string.\n * if instance, return Class name\n */\nexport const getType = (obj, ...instances) => {\n const type = protoType(obj);\n switch (true) {\n case type === 'Object':\n const name = isArrayLike(obj)\n ? 'ArrayLike' // special case Object: ArrayLike\n : obj.constructor?.name ?? 'Object'; // some Objects do not have a constructor method\n return (instances\n .find(inst => obj instanceof inst.class)?.type // allow for 'real' name of Instance, after minification\n ?? name); // return Object name\n case type === 'Function' && Function.prototype.toString.call(obj).startsWith('class '):\n return 'Class';\n default:\n return type;\n }\n};\n/** return TypeValue object */\nexport const asType = (value, ...instances) => ({ type: getType(value, ...instances), value });\n/** assert value is one of a list of Types */\nexport const isType = (obj, ...types) => types.includes(getType(obj));\n/** Type-Guards: assert \\ is of \\ */\nexport const isPrimitive = (obj) => isType(obj, 'String', 'Number', 'BigInt', 'Boolean', 'Symbol', 'Undefined', 'Void', 'Null', 'Empty');\nexport const isReference = (obj) => !isPrimitive(obj);\nexport const isIterable = (obj) => Symbol.iterator in Object(obj) && !isString(obj);\nexport const isString = (obj) => isType(obj, 'String');\nexport const isNumber = (obj) => isType(obj, 'Number') && isFinite(obj);\nexport const isInteger = (obj) => isType(obj, 'BigInt');\nexport const isIntegerLike = (obj) => isType(obj, 'String') && /^-?[0-9]+n$/.test(obj);\nexport const isDigit = (obj) => isType(obj, 'Number', 'BigInt');\nexport const isBoolean = (obj) => isType(obj, 'Boolean');\nexport const isArray = (obj) => isType(obj, 'Array');\nexport const isArrayLike = (obj) => protoType(obj) === 'Object' && 'length' in obj && Object.keys(obj).every(key => key === 'length' || !isNaN(Number(key)));\nexport const isObject = (obj) => isType(obj, 'Object');\nexport const isDate = (obj) => isType(obj, 'Date');\nexport const isRegExp = (obj) => isType(obj, 'RegExp');\nexport const isRegExpLike = (obj) => isType(obj, 'String') && /^\\/.*\\/$/.test(obj);\nexport const isSymbol = (obj) => isType(obj, 'Symbol');\nexport const isSymbolFor = (obj) => isType(obj, 'Symbol') && Symbol.keyFor(obj) !== undefined;\nexport const isPropertyKey = (obj) => isType(obj, 'String', 'Number', 'Symbol');\nexport const isNull = (obj) => isType(obj, 'Null');\nexport const isNullish = (obj) => isType(obj, 'Null', 'Undefined', 'Void', 'Empty');\nexport const isUndefined = (obj) => isType(obj, 'Undefined', 'Void', 'Empty');\nexport const isDefined = (obj) => !isNullish(obj);\nexport const isClass = (obj) => isType(obj, 'Class');\nexport const isFunction = (obj) => isType(obj, 'Function', 'AsyncFunction');\nexport const isPromise = (obj) => isType(obj, 'Promise');\nexport const isMap = (obj) => isType(obj, 'Map');\nexport const isSet = (obj) => isType(obj, 'Set');\nexport const isError = (err) => isType(err, 'Error');\nexport const isTemporal = (obj) => protoType(obj).startsWith('Temporal.');\n// non-standard Objects\nexport const isTempo = (obj) => isType(obj, 'Tempo');\nexport const isEnum = (obj) => isType(obj, 'Enumify');\nexport const isPledge = (obj) => isType(obj, 'Pledge');\nexport const nullToZero = (obj) => obj ?? 0;\nexport const nullToEmpty = (obj) => obj ?? '';\nexport const nullToValue = (obj, value) => obj ?? value;\n/** object has no values */\nexport const isEmpty = (obj) => false\n || isNullish(obj)\n || (isObject(obj) && (Reflect.ownKeys(obj).length === 0))\n || (isString(obj) && (obj.trim().length === 0))\n || (isNumber(obj) && (isNaN(obj) === true))\n || (isArray(obj) && (obj.length === 0))\n || (isSet(obj) && (obj.size === 0))\n || (isMap(obj) && (obj.size === 0));\nexport function assertCondition(condition, message) {\n if (!condition)\n throw new Error(message);\n}\nexport function assertString(str) { assertCondition(isString(str), `Invalid string: ${str}`); }\n;\nexport function assertNever(val) { throw new Error(`Unexpected object: ${val}`); }\n;\n//# sourceMappingURL=type.library.js.map","import { asType, getType, isEmpty, isFunction, isPrimitive } from '#core/shared/type.library.js';\n/** property marker used to unwrap proxies in ownEntries() */\nexport const $Target = Symbol.for('$Target');\n/** mutate Object | Array by excluding values with specified primitive 'types' */\nexport function exclude(obj, ...types) {\n const exclusions = types\n .map(item => item.toLowerCase()) // cast Primitives as Lowercase to aid in matching\n .distinct();\n if (obj && typeof obj === 'object') { // only works on Objects and Arrays\n const keys = [];\n ownEntries(obj)\n .forEach(([key, value]) => {\n const type = getType(value);\n if (['Object', 'Array'].includes(type)) // recurse into object\n exclude(value, ...exclusions);\n if (isPrimitive(value) && exclusions.includes(type.toLowerCase()))\n keys.push(key);\n });\n if (!isEmpty(keys)) // if any values to be excluded\n omit(obj, ...keys);\n }\n return obj; // return Object reference, even though Object has been mutated\n}\nexport function omit(obj, ...keys) {\n const { type, value } = asType(obj);\n switch (type) {\n case 'Array':\n if (isEmpty(keys)) {\n value.clear(); // clear entire Array\n break;\n }\n keys\n .sort()\n .reverse() // remove from end-to-start to preserve indexes\n .forEach(key => value.splice(Number(key), 1)); // remove Array index\n break;\n case 'Object':\n (isEmpty(keys) ? ownKeys(value) : keys) // if no {keys}, assume all ownKeys\n .forEach(key => Reflect.deleteProperty(value, key));\n }\n return value; // return Object reference, even though Object has been mutated\n}\n/** remove all ownKeys from an Object | Array */\nexport function purge(obj) {\n return omit(obj);\n}\n/** reset Object */\nexport function reset(orig, obj) {\n return Object.assign(purge(orig), { ...obj });\n}\n// These functions are to preserve the typescript 'type' of an object's keys & values\n// and will include both string and symbol keys\n/** array of all enumerable PropertyKeys */\nexport function ownKeys(json) {\n return ownEntries(json).map(([key]) => key);\n}\n/** array of all enumerable object values */\nexport function ownValues(json) {\n return ownEntries(json).map(([_, value]) => value);\n}\n/** tuple of enumerable entries with string | symbol keys */\nexport function ownEntries(json, all = false) {\n if (!json || typeof json !== 'object')\n return [];\n const getOwn = (obj) => {\n const tgt = obj[$Target] ?? obj; // unwrap if it's a proxy\n return Reflect.ownKeys(tgt)\n .filter(key => Object.getOwnPropertyDescriptor(tgt, key)?.enumerable)\n .map(key => [key, tgt[key]]);\n };\n if (!all)\n return getOwn(json);\n // all=true: collect per-level bottom-up, reverse to top-down, dedup via Map\n // Map preserves first-insertion position but allows value update (own key shadows ancestor)\n const levels = [];\n const limit = 50; // prevent infinite loops (increased from 10)\n let depth = 0;\n let proto = json;\n do {\n const t = proto[$Target] ?? proto; // CRITICAL: unwrap before checking marker to avoid trap recursion\n const lvl = getOwn(proto);\n if (lvl.length)\n levels.push(lvl);\n proto = Object.getPrototypeOf(t);\n } while (proto && proto !== Object.prototype && ++depth < limit);\n return [...new Map(levels.reverse().flat()).entries()];\n}\n/** return an Object containing all 'own' and 'inherited' enumerable properties */\nexport function allObject(json) {\n return Object.fromEntries(ownEntries(json, true));\n}\n/** get a string-array of 'getter' names for an object */\nexport const getAccessors = (obj = {}) => {\n return ownAccessors(obj, 'get');\n};\n/** get a string-array of 'setter' names for an object */\nexport const setAccessors = (obj = {}) => {\n return ownAccessors(obj, 'set');\n};\nconst ownAccessors = (obj = {}, type) => {\n const accessors = Object.getOwnPropertyDescriptors(obj.prototype || Object.getPrototypeOf(obj));\n return ownEntries(accessors)\n .filter(([_, descriptor]) => isFunction(descriptor[type]))\n .map(([key, _]) => key);\n};\n/** copy all Own properties (including getters / setters) to a new object */\nexport const copyObject = (target, source) => {\n return Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n};\n//# sourceMappingURL=reflection.library.js.map","import { ownValues } from '#core/shared/reflection.library.js';\nimport { isDefined, isReference } from '#core/shared/type.library.js';\n/** General utility functions */\n/** analyze the Call Stack to determine calling Function's name */\nexport const getCaller = () => {\n const stackTrace = new Error().stack // only tested in latest FF and Chrome\n ?.split('\\n')\n ?.map(itm => itm.trim())\n ?.filter(itm => !itm.startsWith('Error'))\n ?? [];\n const callerName = stackTrace[2].split(' ');\n return (callerName[1] === 'new') ? callerName[2] : callerName[1].split('.')[0];\n};\n/** analyze the Call Stack to determine calling Function's name */\nexport const getScript = (nbr = 1) => {\n const stackTrace = new Error().stack\n ?.match(/([^ \\n\\(@])*([a-z]*:\\/\\/\\/?)*?[a-z0-9\\/\\\\]*\\.js/ig)?.[nbr];\n return decodeURI(stackTrace ?? ''); // decodeURI is needed to handle spaces in file-names\n};\n/**\n * introduce a wait-timer that will Error() on timeOut.\n * best used with Promise.race([xxx(), sleep()]\n * @param msg\t\t\tstring to display on a timeout\n * @param timeOut\thow many milliseconds to sleep (default 2-seconds)\n * @returns\t\t\t\tPromise\\\n */\nexport const sleep = (msg = 'sleep: timed out', timeOut = 2000) => new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), timeOut));\n/** Javascript Runtimes */\nexport const CONTEXT = {\n 'Unknown': 'unknown',\n 'Browser': 'browser',\n 'NodeJS': 'nodejs',\n 'Deno': 'deno',\n 'GoogleAppsScript': 'google-apps-script',\n};\n/** determine JavaScript environment context */\nexport const getContext = () => {\n const global = globalThis;\n if (isDefined(global.SpreadsheetApp))\n return { global, type: CONTEXT.GoogleAppsScript };\n if (isDefined(global.window?.document))\n return { global, type: CONTEXT.Browser };\n if (isDefined(global.process?.versions?.node))\n return { global, type: CONTEXT.NodeJS };\n return { global, type: CONTEXT.Unknown };\n};\n// useful for those times when a full Enumify object is not needed, but still lock the Object from mutations\n/** deep-freeze an Array | Object to make it immutable */\nexport function secure(obj) {\n if (isReference(obj)) // skip primitive values\n ownValues(obj) // retrieve the properties on obj\n .forEach(val => Object.isFrozen(val) || secure(val)); // secure each value, if not already Frozen\n return Object.freeze(obj); // freeze the object itself\n}\n//# sourceMappingURL=utility.library.js.map","import { secure } from '#core/shared/utility.library.js';\nimport { isUndefined } from '#core/shared/type.library.js';\n/** curry a Function to allow partial calls */\nexport function curry(fn) {\n return function curried(...args) {\n return (args.length >= fn.length)\n ? fn(...args)\n : (...nextArgs) => curried(...args, ...nextArgs);\n };\n}\n/** generic function to memoize repeated function calls */\nexport function memoizeFunction(fn) {\n const cache = new Map(); // using a Map for better key handling than plain objects\n return function (...args) {\n const key = JSON.stringify(args); // create a unique key from arguments\n console.log('memoize: ', key);\n if (!cache.has(key)) {\n // @ts-ignore\n const result = fn.apply(this, args); // call the original function with the correct context\n console.log('set: ', result);\n cache.set(key, Object.freeze(result)); // stash the result for subsequent calls\n }\n else\n console.log('get: ', cache.get(key));\n return cache.get(key);\n };\n}\nconst wm = new WeakMap();\n/** manually clear the memoization cache for an object */\nexport function clearCache(obj) {\n wm.delete(obj);\n}\n/** define a Descriptor for an Object's memoized-method */\nexport function memoizeMethod(name, fn) {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n value: function (...args) {\n const key = `${String(name)},${JSON.stringify(args)}`;\n let cache = wm.get(this);\n if (!cache) { // add a new object into the WeakMap\n cache = Object.create(null);\n wm.set(this, cache);\n }\n if (isUndefined(cache[key])) { // first time for this method\n cache[key] = fn.apply(this, args); // evaluate the method\n secure(cache[key]); // freeze the returned value\n }\n return cache[key];\n }\n };\n}\n//# sourceMappingURL=function.library.js.map","import { curry } from '#core/shared/function.library.js';\nimport { ownKeys, ownValues, ownEntries } from '#core/shared/reflection.library.js';\nimport { isType, asType, isEmpty, isDefined, isUndefined, isNullish, isString, isObject, isArray, isFunction, isSymbolFor, isSymbol } from '#core/shared/type.library.js';\n/** registry of registered classes */\n// DO NOT EDIT THIS VALUE: used by decorator.library.ts\nexport const Registry = new Map();\n// be aware that 'structuredClone' preserves \\ values... \n// and JSON.stringify() does not\n/** make a deep-copy, using standard browser or JSON functions */\nexport function clone(obj, opts) {\n try {\n return globalThis.structuredClone(obj, opts);\n }\n catch {\n return cleanify(obj); // fallback to JSON functions\n }\n}\n/** return a copy. remove unsupported values (e.g. \\, function) */\nexport function cleanify(obj) {\n try {\n return JSON.parse(JSON.stringify(obj)); // run any toString() methods\n }\n catch (error) {\n console.warn('Could not clean object: ', obj);\n return { ...obj };\n }\n}\n/** deep-copy an Object, and optionally replace \\ fields with a Sentinel function call\t*/\nexport function cloneify(obj, sentinel) {\n try {\n return objectify(stringify(obj), sentinel);\n }\n catch (error) {\n console.warn('Could not cloneify object: ', obj);\n console.warn('stack: ', error.stack);\n return obj;\n }\n}\nfunction replacer(key, obj) { return isEmpty(key) ? obj : stringize(obj); }\nfunction reviver(_key, val) { return decode(val); }\n// safe-characters [sp \" ; < > [ ] ^ { | }]\nconst safeList = ['20', '22', '3B', '3C', '3E', '5B', '5D', '5E', '7B', '7C', '7D'];\n/** encode control characters, then replace a safe-subset back to text-string */\nfunction encode(val) {\n let enc = encodeURI(val);\n if (enc.includes('%')) { // if an encoded URI might be in string\n safeList.forEach(code => {\n const uri = '%' + code;\n const reg = new RegExp(uri, 'g');\n enc = enc.replace(reg, decodeURI(uri));\n });\n }\n return enc;\n}\n/** decode control characters */\nfunction decode(val) {\n if (isString(val)) {\n try {\n return decodeURI(val); // might fail if badly encoded '%'\n }\n catch (error) {\n // console.warn(`decodeURI: ${(error as Error).message} -> ${val}`);\n }\n }\n return val; // return original value\n}\n/** check type can be stringify'd */\nfunction isStringable(val) {\n return !isType(val, 'Function', 'AsyncFunction', 'WeakMap', 'WeakSet', 'WeakRef');\n}\n/** string representation of a single key:value Object */\nfunction oneKey(type, value) {\n return `{\"$${type}\":${value}}`;\n}\n/** Symbols in an Object-key will need special treatment */\nfunction fromSymbol(key) {\n return stringize(isSymbol(key) // @@(name) for global, @(name) for local symbols\n ? `${isSymbolFor(key) ? '@' : ''}@(${key.description ?? ''})`\n : key);\n}\nconst symKey = /^@(@)?\\(([^\\)]*)\\)$/; // pattern to match a stringify'd Symbol\n/** reconstruct a Symbol from a string-representation of a key */\nfunction toSymbol(value) {\n const [pat, keyFor, desc] = value.toString().match(symKey) || [null, undefined, undefined];\n switch (true) {\n case isSymbol(value): // already a Symbol\n case isNullish(pat): // incorrectly encoded Symbol\n case isDefined(keyFor) && isUndefined(desc): // incorrectly encoded global Symbol\n return value;\n case isDefined(keyFor): // global Symbol\n return Symbol.for(desc);\n case isUndefined(keyFor): // local Symbol\n default:\n return Symbol(desc);\n }\n}\n/**\n * For items which are not currently serializable via standard JSON.stringify (Undefined, BigInt, Set, Map, Symbol, etc.)\n * this creates a stringified, single key:value Object to represent the value; for example '{ \"$BigInt\": 123 }'\n *\n * Drawbacks:\n * no support Function / WeakMap / WeakSet / WeakRef\n * limited support for user-defined Classes (must be specifically registered with @Serialize() decorator)\n */\n/**\n * serialize Objects for string-safe stashing in WebStorage, Cache, etc\n * uses JSON.stringify where available, else returns stringified single key:value Object '{[$type]: value}'\n */\nexport function stringify(obj) {\n return stringize(obj, false);\n}\n/**\n * internal function to process stringify-requests (and hide second parameter)\n * where first argument is the object to stringify, and\n * the second argument is a boolean to indicate if function is being called recursively\n */\nfunction stringize(obj, recurse = true) {\n const arg = asType(obj);\n const one = curry(oneKey)(arg.type); // curry the oneKey() function\n switch (arg.type) {\n case 'String':\n if (!recurse) { // if a top-level string (e.g. 'true' or '1234')\n recurse = arg.value === 'true' // ensure true|false|null|1234 are quoted by JSON.stringify\n || arg.value === 'false' // so they will be correctly identified during objectify()\n || arg.value === 'null'\n || parseFloat(arg.value).toString() === arg.value;\n }\n return recurse\n ? JSON.stringify(encode(arg.value)) // encode string for safe-storage\n : encode(arg.value); // dont JSON.stringify a top-level string\n case 'Boolean':\n case 'Null':\n case 'Number':\n return JSON.stringify(arg.value); // JSON.stringify will correctly handle these\n case 'Void':\n case 'Undefined':\n return one(JSON.stringify('void')); // preserve 'undefined' values\t\t\n case 'BigInt':\n return one(arg.value.toString()); // even though BigInt has a toString method, it is not supported in JSON.stringify\n case 'Object':\n const obj = ownEntries(arg.value)\n .filter(([, val]) => isStringable(val))\n .map(([key, val]) => `${fromSymbol(key)}: ${stringize(val)}`)\n .join(',');\n return `{${obj}}`;\n case 'Array':\n const arr = arg.value\n .filter(val => isStringable(val))\n .map(val => stringize(val))\n .join(',');\n return `[${arr}]`;\n case 'Map':\n const map = Array.from(arg.value.entries())\n .filter(([, val]) => isStringable(val))\n .map(([key, val]) => `[${stringize(key)}, ${stringize(val)}]`)\n .join(',');\n return one(`[${map}]`);\n case 'Set':\n const set = Array.from(arg.value.values())\n .filter(val => isStringable(val))\n .map(val => stringize(val))\n .join(',');\n return one(`[${set}]`);\n case 'Symbol':\n return one(fromSymbol(arg.value));\n case 'RegExp':\n return one(stringize({ source: arg.value.source, flags: arg.value.flags }));\n case 'Class':\n default:\n const value = arg.value;\n switch (true) {\n case !isStringable(value): // Object is not stringify-able\n return undefined;\n case isFunction(value.toJSON): // Object has its own toJSON method\n return one(stringize(value.toJSON()));\n case isFunction(value.toString): // Object has its own toString method\n const str = value.toString();\n return one(str.includes('\"') // TODO: improve detection of JSON vs non-JSON strings\n ? str\n : JSON.stringify(str));\n case isFunction(value.valueOf): // Object has its own valueOf method\t\t\n return one(JSON.stringify(value.valueOf()));\n default: // else standard stringify\n return one(JSON.stringify(value, replacer));\n }\n }\n}\n/** rebuild an Object from its stringified representation */\nexport function objectify(str, sentinel) {\n if (!isString(str))\n return str; // skip parsing\n let parse;\n try {\n parse = JSON.parse(str, reviver); // catch if cannot parse\n }\n catch (error) {\n if (str.startsWith('\"') && str.endsWith('\"')) {\n console.warn(`objectify.parse: -> ${str}, ${error.message}`);\n return str; // bail-out\n }\n else\n return objectify(`\"${str}\"`, sentinel); // have another try, quoted\n }\n switch (true) {\n case str.startsWith('{') && str.endsWith('}'): // looks like Object\n case str.startsWith('[') && str.endsWith(']'): // looks like Array\n return traverse(parse, sentinel); // recurse into object\n default:\n return parse;\n }\n}\n/** recurse into Object / Array, looking for special single key:value Objects */\nfunction traverse(obj, sentinel) {\n if (isObject(obj)) {\n return typeify(ownEntries(obj)\n .reduce((acc, [key, val]) => Object.assign(acc, { [toSymbol(key)]: typeify(traverse(val, sentinel)) }), {}), sentinel);\n }\n if (isArray(obj)) {\n return ownValues(obj)\n .map(val => typeify(traverse(val, sentinel)));\n }\n return obj;\n}\n/** rebuild an Object from its single key:value representation */\nfunction typeify(json, sentinel) {\n if (!isObject(json) || ownKeys(json).length !== 1)\n return json; // only JSON Objects, with a single key:value pair\n const [$type, value] = ownEntries(json)[0];\n if (!String($type).startsWith('$'))\n return json; // not a serialized single key:value Object\n const type = $type.substring(1); // remove '$' prefix\n switch (type) {\n case 'String':\n case 'Boolean':\n case 'Object':\n case 'Array':\n return value; // these types are already handled by traverse()\n case 'Number':\n return Number(value);\n case 'BigInt':\n return BigInt(value);\n case 'Null':\n return null;\n case 'Undefined':\n case 'Empty':\n case 'Void':\n return sentinel?.(); // run Sentinel function to handle undefined values\n case 'Date':\n return new Date(value);\n case 'RegExp':\n return new RegExp(value.source, value.flags);\n case 'Symbol':\n return toSymbol(value);\n case 'Map':\n return new Map(value);\n case 'Set':\n return new Set(value);\n default:\n const cls = Registry.get($type); // lookup registered Class\n if (!cls) {\n console.warn(`objectify: dont know how to deserialize '${type}'`);\n return json; // return original JSON object\n }\n return Reflect.construct(cls, [value]); // create new Class instance\n }\n}\n//# sourceMappingURL=serialize.library.js.map","import { ownEntries } from '#core/shared/reflection.library.js';\nimport { Registry } from '#core/shared/serialize.library.js';\n/**\n * Some interesting Class Decorators\n */\n/** decorator to freeze a Class to prevent modification */\nexport function Immutable(value, { kind, name, addInitializer }) {\n name = String(name);\n switch (kind) {\n case 'class':\n const wrapper = {\n [name]: class extends value {\n constructor(...args) {\n super(...args);\n Object.freeze(this); // freeze the instance\n }\n }\n }[name];\n addInitializer(() => {\n const protect = (obj) => {\n ownEntries(Object.getOwnPropertyDescriptors(obj))\n .filter(([name]) => name !== 'constructor') // dont touch the constructor\n .forEach(([name, { configurable, writable }]) => {\n if (configurable) {\n const update = { configurable: false };\n if (writable)\n update.writable = false; // only data descriptors have 'writable'\n Object.defineProperty(obj, name, update);\n }\n });\n };\n protect(value); // protect original static members\n protect(value.prototype); // protect original prototype members\n protect(wrapper); // protect wrapper static members\n protect(wrapper.prototype); // protect wrapper prototype members\n });\n return wrapper;\n default:\n throw new Error(`@Immutable decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n/** register a Class for serialization */\nexport function Serializable(value, { kind, name, addInitializer }) {\n name = String(name); // cast as String\n switch (kind) {\n case 'class':\n addInitializer(() => Registry.set(`$${name}`, value)); // register the class for serialization, via its toString() method\n return value;\n default:\n throw new Error(`@Serializable decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n/** make a Class not instantiable */\nexport function Static(value, { kind, name }) {\n name = String(name);\n switch (kind) {\n case 'class':\n const wrapper = {\n [name]: class extends value {\n constructor(...args) {\n super(...args);\n throw new TypeError(`${name} is not a constructor`);\n }\n }\n }[name];\n return wrapper;\n default:\n throw new Error(`@Static decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n//# sourceMappingURL=class.library.js.map","import { __esDecorate, __runInitializers } from \"tslib\";\nimport { Immutable } from '#core/shared/class.library.js';\nimport { asType, isObject } from '#core/shared/type.library.js';\nconst Method = {\n Log: 'log',\n Info: 'info',\n Warn: 'warn',\n Debug: 'debug',\n Error: 'error',\n};\n/**\n * provide standard logging methods to the console for a class\n */\nlet Logify = (() => {\n let _classDecorators = [Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Logify = class {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Logify = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n #name;\n #opts = {};\n #log(method, ...msg) {\n if (this.#opts.debug)\n console[method](this.#name, ...msg);\n }\n /**\n * if {catch:true} then show a warning on the console and return\n * otherwise show an error on the console and re-throw the error\n */\n catch(...msg) {\n if (this.#opts.catch) {\n this.warn(...msg); // show a warning on the console\n return; // safe-return\n }\n this.error(...msg); // this goes to the console\n throw new Error(`${this.#name}${msg.map(m => isObject(m) ? JSON.stringify(m) : String(m)).join(' ')}`); // catch will be loud or silent, based on #catch config\n }\n /** console.log */ log = (...msg) => this.#log(Method.Log, ...msg);\n /** console.info */ info = (...msg) => this.#log(Method.Info, ...msg);\n /** console.warn */ warn = (...msg) => this.#log(Method.Warn, ...msg);\n /** console.debug */ debug = (...msg) => this.#log(Method.Debug, ...msg);\n /** console.error */ error = (...msg) => this.#log(Method.Error, ...msg);\n constructor(self, opts = {}) {\n const arg = asType(self);\n switch (arg.type) {\n case 'String':\n this.#name = arg.value;\n break;\n // @ts-ignore\n case 'Object':\n Object.assign(opts, arg.value);\n default:\n this.#name = (self ?? this).constructor.name.concat(': ') ?? '';\n }\n this.#opts.debug = opts.debug ?? false; // default debug to 'false'\n this.#opts.catch = opts.catch ?? false; // default catch to 'false'\t\t\t\t\t\t\t\t\n }\n };\n return Logify = _classThis;\n})();\nexport { Logify };\n//# sourceMappingURL=logify.class.js.map","import { ownKeys, ownEntries } from '#core/shared/reflection.library.js';\nimport { isObject, isArray, isReference, isFunction, isDefined, isEmpty, isNullish } from '#core/shared/type.library.js';\n/** Get nested value */\nexport function extract(obj, path, dflt) {\n if (isEmpty(path))\n return obj; // finished searching\n if (!isObject(obj) && !isArray(obj))\n return obj;\n return path\n .toString()\n .replace(/\\[([^\\[\\]]*)\\]/g, '.$1.') // convert [indexes] to properties\n .split('.')\n .filter(field => !isEmpty(field)) // remove empty fields\n .reduce((acc, field) => acc?.[field] ?? null, obj) ?? dflt;\n}\n/** remove quotes around property names */\nexport const unQuoteObj = (obj) => {\n return JSON.stringify(obj)\n ?.replace(/\"([^\"]+)\":/g, '$1: ')\n ?.replace(/,/g, ', ');\n};\n/** copy enumerable properties to a new Object */\nexport const asObject = (obj) => {\n if (isNullish(obj) || !isObject(obj))\n return obj;\n const temp = isArray(obj) ? [] : {};\n ownKeys(obj)\n .forEach(key => temp[key] = asObject(obj[key]));\n return temp;\n};\n/** deep-compare object values for equality */\nexport const isEqual = (obj1 = {}, obj2 = {}) => {\n const keys = new Set(); // union of unique keys from both Objects\n const keys1 = isFunction(obj1.keys) ? Array.from(obj1.keys()) : ownKeys(obj1);\n const keys2 = isFunction(obj2.keys) ? Array.from(obj2.keys()) : ownKeys(obj2);\n keys1.forEach(key => keys.add(key));\n keys2.forEach(key => keys.add(key));\n return [...keys] // cast as Array\n .every(key => {\n const val1 = obj1[key];\n const val2 = obj2[key];\n return isReference(val1) && isReference(val2)\n ? isEqual(val1, val2) // recurse into object\n : val1 === val2;\n });\n};\n/** find all methods on an Object */\nexport const getMethods = (obj, all = false) => {\n const properties = new Set();\n let currentObj = obj;\n do {\n Object\n .getOwnPropertyNames(currentObj)\n .map(key => properties.add(key));\n } while (all && (currentObj = Object.getPrototypeOf(currentObj)));\n return [...properties.keys()]\n .filter(key => isFunction(obj[key]));\n};\n/** extract only defined values from Object */\nexport function ifDefined(obj) {\n return ownEntries(obj)\n .reduce((acc, [key, val]) => {\n if (isDefined(val))\n acc[key] = val;\n return acc;\n }, {});\n}\n/** extract a subset of keys from an object */\nexport const pick = (obj, ...keys) => {\n const ownKeys = Object.getOwnPropertyNames(obj);\n return keys.reduce((acc, key) => {\n if (ownKeys.includes(key))\n acc[key] = obj[key];\n return acc;\n }, {});\n};\n/** extract a named key from an array of objects */\nexport const pluck = (objs, key) => objs.map(obj => obj[key]);\n/** extend an object with the properties of another */\nexport const extend = (obj, ...objs) => Object.assign(obj, ...objs);\nexport const countProperties = (obj = {}) => ownKeys(obj).length;\nexport function looseIndex(arg) {\n if (isDefined(arg))\n return isFunction(arg) ? arg() : arg;\n return (obj) => isFunction(obj) ? obj() : obj;\n}\n/** loose object with symbols values */\nlooseIndex.stringSymbol = looseIndex();\n/** loose object with symbol keys and RegExp values */\nlooseIndex.symbolRegExp = looseIndex();\n/** loose object with symbol keys and string values */\nlooseIndex.symbolString = looseIndex();\n/** loose object with string keys and string values */\nlooseIndex.stringString = looseIndex();\n//# sourceMappingURL=object.library.js.map","import { clone, stringify } from '#core/shared/serialize.library.js';\nimport { isIntegerLike, isArrayLike, isDefined, isInteger, isIterable, isNullish, isString, isUndefined, asType, isNumber } from '#core/shared/type.library.js';\nexport function asArray(arr = [], fill) {\n switch (true) {\n case isArrayLike(arr): // allow for {length:nn} objects\n case isIterable(arr) && !isString(arr): // dont iterate Strings\n return Array.from(arr, val => {\n return isUndefined(fill) || isDefined(val)\n ? val // if no {fill}, then use {val}\n : clone(fill); // clone {fill} to create new Objects\n });\n default:\n return Array.of(arr);\n }\n}\n/** stringify if not nullish */\nexport function asString(str) {\n return isNullish(str)\n ? ''\n : isInteger(str)\n ? str.toString() + 'n'\n : stringify(str);\n}\n/** convert String | Number | BigInt to Number */\nexport function asNumber(str) {\n return parseFloat(str?.toString() ?? 'NaN');\n}\n/** convert String | Number to BigInt */\nexport function asInteger(str) {\n const arg = asType(str);\n switch (arg.type) {\n case 'BigInt':\n return arg.value; // already a BigInt\n case 'Number':\n return BigInt(Math.trunc(arg.value)); // cast as BigInt\n case 'String':\n return (isIntegerLike(arg.value)) // String representation of a BigInt\n ? BigInt(arg.value.slice(0, -1)) // get rid of trailing 'n'\n : BigInt(arg.value);\n default:\n return str;\n }\n}\n/** test if can convert String to Numeric */\nexport function isNumeric(str) {\n const arg = asType(str);\n switch (arg.type) {\n case 'Number':\n case 'BigInt':\n return true;\n case 'String':\n return isIntegerLike(arg.value)\n ? true // is Number | BigInt\n : !isNaN(asNumber(str)) && isFinite(str); // test if Number\n default:\n return false;\n }\n}\n/** return as Number if possible, else original String */\nexport const ifNumeric = (str, stripZero = false) => {\n switch (true) {\n case isInteger(str): // BigInt → Number\n return Number(str);\n case isNumber(str): // Number → as-is\n return str;\n case isNumeric(str) && (!str?.toString().startsWith('0') || stripZero):\n return asNumber(str); // numeric String → Number\n default:\n return str; // non-numeric String → as-is\n }\n};\n//# sourceMappingURL=coercion.library.js.map","import { objectify, stringify } from '#core/shared/serialize.library.js';\nimport { CONTEXT, getContext } from '#core/shared/utility.library.js';\nimport { isDefined, isUndefined, isString } from '#core/shared/type.library.js';\nconst context = getContext();\nlet storage = context.type === CONTEXT.Browser\n ? context.global?.localStorage //as globalThis.Storage\t\t// default to localStorage in a browser\n : undefined;\n/** select local | session storage */\nexport function selStorage(store = 'local') {\n const name = (store + 'Storage');\n return storage = globalThis[name]; // return whichever was selected.\n}\nexport function getStorage(key, dflt) {\n let store;\n if (isUndefined(key))\n return dflt ?? {};\n switch (context.type) {\n case CONTEXT.Browser:\n store = storage.getItem(key);\n break;\n case CONTEXT.NodeJS:\n store = context.global.process.env[key];\n break;\n case CONTEXT.GoogleAppsScript:\n store = context.global.PropertiesService?.getUserProperties().getProperty(key);\n break;\n default:\n throw new Error(`Cannot determine Javascript context: ${context.type}`);\n }\n return isString(store)\n ? objectify(store) // rebuild object from its stringified representation\n : dflt;\n}\n/** set / delete storage */\nexport function setStorage(key, val) {\n const stash = isDefined(val) ? stringify(val) : undefined;\n const set = isDefined(stash);\n switch (context.type) {\n case CONTEXT.Browser:\n set\n ? storage.setItem(key, stash)\n : storage.removeItem(key);\n break;\n case CONTEXT.NodeJS:\n set\n ? (context.global.process.env[key] = stash)\n : (delete context.global.process.env[key]);\n break;\n case CONTEXT.GoogleAppsScript:\n set\n ? context.global.PropertiesService?.getUserProperties().setProperty(key, stash)\n : context.global.PropertiesService?.getUserProperties().deleteProperty(key);\n break;\n default:\n throw new Error(`Cannot determine Javascript context: ${context.type}`);\n }\n}\n//# sourceMappingURL=storage.library.js.map","import { $Target, allObject } from '#core/shared/reflection.library.js';\nimport { secure } from '#core/shared/utility.library.js';\nimport { isFunction } from '#core/shared/type.library.js';\n/** Node.js custom inspection symbol */\nconst $Inspect = Symbol.for('nodejs.util.inspect.custom');\n/** Stealth Proxy pattern to allow for iteration and logging over a Frozen object */\nexport function getProxy(target) {\n secure(target);\n const tgt = target[$Target] ?? target;\n let cachedJSON;\n return new Proxy(target, {\n isExtensible: (t) => Reflect.isExtensible(t),\n preventExtensions: (t) => Reflect.preventExtensions(t),\n getOwnPropertyDescriptor: (_, key) => Reflect.getOwnPropertyDescriptor(tgt, key),\n getPrototypeOf: () => Reflect.getPrototypeOf(tgt),\n deleteProperty: (_, key) => Reflect.deleteProperty(tgt, key),\n ownKeys: () => Reflect.ownKeys(tgt),\n has: (_, key) => Reflect.has(tgt, key),\n set: (_, key, val) => Reflect.set(tgt, key, val),\n get: (_, key, receiver) => {\n if (key === $Target)\n return tgt; // found the 'stop' marker\n if (key === $Inspect || key === 'toJSON') { // two special properties require virtual closures\n const own = Object.getOwnPropertyDescriptor(tgt, key);\n if (own && isFunction(own.value)) // if object already has its own toJSON, return\n return own.value;\n if (!cachedJSON) { // otherwise, create a virtual closure\n const result = allObject(receiver); // resolve full-object representation\n cachedJSON = () => result; // memoize for subsequent calls\n }\n return cachedJSON; // return the memoized closure\n }\n const val = Reflect.get(tgt, key, receiver);\n return (typeof val === 'function') // if the value is a function\n ? val.bind(tgt) // bind it to the target\n : val; // else return the value\n },\n });\n}\n//# sourceMappingURL=proxy.library.js.map","import { asNumber, asString, isNumeric } from '#core/shared/coercion.library.js';\nimport { stringify } from '#core/shared/serialize.library.js';\nimport { isString, isObject, assertCondition, assertString, nullToValue } from '#core/shared/type.library.js';\n// General functions\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// This section needs to be Function declarations so that they are hoisted\n// (because they are referenced in prototype.library)\n/**\n * clean a string to remove some standard control-characters (tab, line-feed, carriage-return) and trim redundant spaces.\n * allow for optional RegExp to specify additional match\n */\nexport function trimAll(str, pat) {\n return str\n .toString() // coerce to String\n .replace(pat, '') // remove regexp, if supplied\n .replace(/\\t/g, ' ') // replace with \n .replace(/(\\r\\n|\\n|\\r)/g, ' ') // replace & \n .replace(/\\s{2,}/g, ' ') // trim multiple \n .trim(); // leading/trailing \n}\n/** every word has its first letter capitalized */\nexport function toProperCase(...str) {\n return str\n .flat() // in case {str} was already an array\n .map(text => text.replace(/\\w\\S*/g, word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()))\n .join(' ');\n}\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst PAT = /[A-Z\\xC0-\\xD6\\xD8-\\xDE]?[a-z\\xDF-\\xF6\\xF8-\\xFF]+|[A-Z\\xC0-\\xD6\\xD8-\\xDE]+(?![a-z\\xDF-\\xF6\\xF8-\\xFF])|\\d+/g;\nexport const toCamelCase = (sentence) => {\n let [word, ...rest] = sentence.match(PAT) ?? [''];\n if (isNumeric(word)) {\n word = rest[0];\n rest.splice(0, 1);\n }\n return (sentence.startsWith('_') ? '_' : '') + word.toLocaleLowerCase() + toProperCase(...rest).replace(/ /g, '');\n};\nconst HEX = 16;\nexport const randomString = (len = 36) => {\n let str = '';\n do // generate random strings\n str += Math.floor(Math.random() * 10 ** 16).toString(HEX).substring(2, 15);\n while (str.length < len);\n return str.substring(0, len);\n};\nexport function sprintf(fmt, ...msg) {\n const regexp = /\\$\\{(\\d)\\}/g; // pattern to find \"${digit}\" parameter markers\n let sfmt = asString(fmt); // avoid mutate fmt\n if (!isString(fmt)) { // might be an Object\n msg.unshift(JSON.stringify(fmt)); // push to start of msg[]\n sfmt = ''; // reset the string-format\n }\n let cnt = 0; // if the format does not contain a corresponding '${digit}' then re-construct the parameters\n sfmt = sfmt.replace(/%[sj]/g, _ => `\\${${cnt++}}`); // flip all the %s or %j to a ${digit} parameter\n const params = Array.from(sfmt.matchAll(regexp))\n .map(match => Number(match[1])); // which parameters are in the fmt\n msg.forEach((_, idx) => {\n if (!params.includes(idx)) // if more args than params\n sfmt += `${sfmt.length === 0 ? '' : sfmt.endsWith(':') ? ' ' : ', '}\\${${idx}}`; // append a dummy params to fmt\n });\n // 2024-02-21 some Objects do not have a .toString method\n return sfmt.replace(regexp, (_, idx) => msg[idx]?.toString?.() || stringify(msg[idx]));\n}\n/** apply a plural suffix, if greater than '1' */\nexport const plural = (val, word, plural = word + 's') => {\n const _plural = (num, word, plural = word + 's') => [1, -1].includes(Number(num)) ? word : plural;\n return isObject(val)\n ? (num, word) => _plural(num, word, val[word])\n : _plural(val, word, plural);\n};\n/** strip a plural suffix, if endsWith 's' */\nexport const singular = (val) => val.endsWith('s') ? val.slice(0, -1) : val;\n/** make an Object's values into a Template Literals, and evaluate */\nexport const makeTemplate = (templateString) => (templateData) => new Function(`{${Object.keys(templateData).join(',')}}`, 'return `' + templateString + '`')(templateData);\nexport const toLower = (str) => isString(str) ? asString(str).toLowerCase().trim() : str;\nexport const toUpper = (str) => isString(str) ? asString(str).toUpperCase().trim() : str;\nexport const strlen = (str, min, max) => {\n assertString(str);\n assertCondition(str.length >= min && str.length <= (max ?? min), 'string length is not between specified min and max');\n return str;\n};\n/**\n * pad a string with leading character\n * @param\t\tnbr\tinput value to pad\n * @param\t\tlen\tfill-length (default: 2)\n * @param\t\tfill\tcharacter (default \\ for string and \\ for number)\n * @returns\tfixed-length string padded on the left with fill-character\n */\nexport const pad = (nbr = 0, len = 2, fill) => nbr.toString().padStart(len, nullToValue(fill, isNumeric(nbr) ? '0' : ' ').toString());\n/** pad a string with non-blocking spaces, to help right-align a display */\nexport const padString = (str, pad = 6) => (isNumeric(str) ? asNumber(str).toFixed(2).toString() : str.toString() ?? '').padStart(pad, '\\u007F');\n//# sourceMappingURL=string.library.js.map","import { __esDecorate, __runInitializers } from \"tslib\";\nimport { secure } from '#core/shared/utility.library.js';\nimport { Serializable } from '#core/shared/class.library.js';\nimport { stringify } from '#core/shared/serialize.library.js';\nimport { memoizeMethod } from '#core/shared/function.library.js';\nimport { ownEntries } from '#core/shared/reflection.library.js';\nimport { getProxy } from './proxy.library.js';\nimport { asType, isArray, isNumber } from '#core/shared/type.library.js';\n/** used to identify the Enumify type */ const tag = 'Enumify';\n/** helper method to create a property descriptor */\nfunction value(val) {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n value: val\n };\n}\n/**\n * private instance of the Enum Prototype, which is then Used to create each new Object-Enum\n*/\nconst ENUM = secure(Object.create(null, {\n count: memoizeMethod('count', function () { return this.entries().length; }),\n keys: memoizeMethod('keys', function () { return this.entries().map(([key]) => key); }),\n values: memoizeMethod('values', function () { return this.entries().map(([_, val]) => val); }),\n entries: memoizeMethod('entries', function () { return ownEntries(this, true); }),\n invert: memoizeMethod('invert', function () { return enumify(this.entries().reduce((acc, [key, val]) => ({ ...acc, [val]: key }), {})); }),\n toString: memoizeMethod('toString', function () { return stringify(this.toJSON()); }),\n has: value(function (key) { return this.keys().includes(key); }),\n includes: value(function (search) { return this.values().includes(search); }),\n keyOf: value(function (search) { return this.invert()[search]; }),\n extend: value(function (list) { return enumify.call(this, list); }),\n forEach: value(function (fn, thisArg) { this.entries().forEach((entry, index) => fn.call(thisArg, entry, index, this)); }),\n filter: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => (fn.call(thisArg, entry, index, this) ? Object.assign(acc, { [entry[0]]: entry[1] }) : acc), {})); }),\n map: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => { const res = fn.call(thisArg, entry, index, this); return Object.assign(acc, isArray(res) && res.length === 2 ? { [res[0]]: res[1] } : { [entry[0]]: res }); }, {})); }),\n [Symbol.iterator]: value(function () { return this.entries()[Symbol.iterator](); }),\n [Symbol.toStringTag]: value(tag),\n}));\nexport function enumify(list) {\n const proto = this ?? ENUM;\n const arg = asType(list);\n let stash = {};\n switch (arg.type) {\n case 'Enumify':\n case 'Object':\n Object.assign(stash, arg.value);\n break;\n case 'Array':\n arg.value.forEach((key, index) => {\n if (isNumber(key))\n throw new Error('Enumify: numeric keys are not supported');\n Object.assign(stash, { [key]: index });\n });\n break;\n default:\n throw new Error(`Enumify: invalid argument type: ${arg.type}`);\n }\n const target = Object.create(proto, Object.getOwnPropertyDescriptors(stash));\n return getProxy(target);\n}\n/** create an entry in the Serialization Registry to describe how to rebuild an Enum */\nlet Enumify = (() => {\n let _classDecorators = [Serializable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Enumify = class {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Enumify = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n constructor(list) {\n return enumify(list);\n }\n };\n return Enumify = _classThis;\n})();\nexport { Enumify };\n//# sourceMappingURL=enumerate.library.js.map","import { enumify } from '#core/shared/enumerate.library.js';\nimport { secure } from '#core/shared/utility.library.js';\n/**\n * Various enumerations used throughout Tempo library.\n * These are exported and added as static getters of the Tempo class.\n * Usage example:\n * ```typescript\n * \t\t\tconst dayNames = Tempo.WEEKDAY.keys();\t// ['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n * ```\n */\n/** */\nexport const WEEKDAY = enumify(['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']);\nexport const WEEKDAYS = enumify(['Everyday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']);\nexport const MONTH = enumify(['All', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);\nexport const MONTHS = enumify(['Every', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nexport const SEASON = enumify({ Summer: 'summer', Autumn: 'autumn', Winter: 'winter', Spring: 'spring' });\nexport const COMPASS = enumify({ North: 'north', East: 'east', South: 'south', West: 'west' });\n/** number of seconds in a time unit */\nexport const DURATION = enumify({\n /** approx number of seconds in a year */ year: 31_536_000,\n /** approx number of seconds in a month */ month: 2_628_000,\n /** number of seconds in a week */ week: 604_800,\n /** number of seconds in a day */ day: 86_400,\n /** number of seconds in an hour */ hour: 3_600,\n /** number of seconds in a minute */ minute: 60,\n /** one second */ second: 1,\n /** number of seconds in a millisecond */ millisecond: .001,\n /** number of seconds in a microsecond */ microsecond: .000_001,\n /** number of seconds in a nanosecond */ nanosecond: .000_000_001,\n});\n/** number of milliseconds in a time unit */\nexport const DURATIONS = enumify({\n /** approx number of milliseconds in a year */ years: DURATION.year * 1_000,\n /** approx number of milliseconds in a month */ months: DURATION.month * 1_000,\n /** number of milliseconds in a week */ weeks: DURATION.week * 1_000,\n /** number of milliseconds in a day */ days: DURATION.day * 1_000,\n /** number of milliseconds in an hour */ hours: DURATION.hour * 1_000,\n /** number of milliseconds in a minute */ minutes: DURATION.minute * 1_000,\n /** number of milliseconds in a second */ seconds: DURATION.second * 1_000,\n /** one millisecond */ milliseconds: DURATION.millisecond * 1_000,\n /** number of milliseconds in a microsecond */ microseconds: DURATION.microsecond * 1_000,\n /** number of milliseconds in a nanosecond */ nanoseconds: Number((DURATION.nanosecond * 1_000).toPrecision(6)),\n});\n/** pre-defined Format code short-cuts */\nexport const FORMAT = enumify({\n /** useful for standard date display */ display: '{www}, {dd} {mmm} {yyyy}',\n /** useful for standard datestamps */ weekDate: '{www}, {yyyy}-{mmm}-{dd}',\n /** useful for standard timestamps */ weekTime: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}',\n /** useful for standard full timestamps */ weekStamp: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}',\n /** useful for readable month and day */ dayMonth: '{dd}-{mmm}',\n /** useful for Date */ dayDate: '{dd}-{mmm}-{yyyy}',\n /** display with Time */ dayTime: '{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}',\n /** useful for stamping logs */ logStamp: '{yyyy}{mm}{dd}T{hhmiss}.{ff}',\n /** useful for sorting display-strings */ sortTime: '{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}',\n /** useful for sorting week order */ yearWeek: '{wy}{ww}',\n /** useful for sorting month order */ yearMonth: '{yyyy}{mm}',\n /** useful for sorting date order */ yearMonthDay: '{yyyy}{mm}{dd}',\n /** just Date portion */ date: '{yyyy}-{mm}-{dd}',\n /** just Time portion */ time: '{hh}:{mi}:{ss}',\n});\nexport const LIMIT = secure({\n /** Tempo(31-Dec-9999.23:59:59).ns */ maxTempo: Temporal.Instant.from('9999-12-31T23:59:59.999999999+00:00').epochNanoseconds,\n /** Tempo(01-Jan-1000.00:00:00).ns */ minTempo: Temporal.Instant.from('1000-01-01T00:00+00:00').epochNanoseconds,\n});\nexport const ELEMENT = enumify({\n yy: 'year',\n mm: 'month',\n ww: 'week',\n dd: 'day',\n hh: 'hour',\n mi: 'minute',\n ss: 'second',\n ms: 'millisecond',\n us: 'microsecond',\n ns: 'nanosecond',\n});\nexport const MUTATION = enumify(ELEMENT.values()).extend(['event', 'period', 'clock', 'time', 'date', 'start', 'mid', 'end']);\nexport const ZONED_DATE_TIME = enumify(['value', 'timeZoneId', 'calendarId', 'monthCode', 'offset', 'timeZone']).extend(ELEMENT.values());\nexport const OPTION = enumify(['value', 'mdyLocales', 'mdyLayouts', 'store', 'discovery', 'debug', 'catch', 'timeZone', 'calendar', 'locale', 'pivot', 'sphere', 'timeStamp', 'snippet', 'layout', 'event', 'period', 'formats', 'plugins']);\nexport const PARSE = enumify(['mdyLocales', 'mdyLayouts', 'formats', 'pivot', 'snippet', 'layout', 'event', 'period', 'anchor', 'value', 'discovery', 'plugins']);\n//# sourceMappingURL=tempo.enum.js.map","import { isDefined } from '#core/shared/type.library.js';\nconst SCHEMA = [\n ['year', 'yy'],\n ['month', 'mm'],\n ['day', 'dd'],\n ['hour', 'hh'],\n ['minute', 'mi'],\n ['second', 'ss'],\n ['millisecond', 'ms'],\n ['microsecond', 'us'],\n ['nanosecond', 'ns']\n];\n/**\n * find where a Tempo fits within a range of DateTime\n */\nexport function getTermRange(tempo, list, keyOnly = true) {\n const sorted = [...list]\n .sortBy('year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond')\n .toReversed();\n const match = sorted\n .find(range => {\n for (const [rKey, sKey] of SCHEMA) {\n const val = range[rKey];\n if (isDefined(val)) {\n const sVal = tempo[sKey];\n if (sVal > val)\n return true;\n if (sVal < val)\n return false;\n }\n }\n return true; // fallback if DateTime exactly matches a range criteria\n })\n ?? sorted.at(0); // fallback to wraparound at first item\n return keyOnly\n ? match?.key\n : match;\n}\n//# sourceMappingURL=term.utils.js.map","import { cloneify } from '#core/shared/serialize.library.js';\nimport { COMPASS } from '#core/tempo.config/tempo.enum.js';\nimport { getTermRange } from './term.utils.js';\n/** definition of fiscal quarter ranges */\nconst ranges = [\n [\n { key: 'Q1', day: 1, month: 1, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q2', day: 1, month: 4, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q3', day: 1, month: 7, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q4', day: 1, month: 10, fiscal: 0, sphere: COMPASS.North },\n ], [\n { key: 'Q1', day: 1, month: 7, fiscal: 1, sphere: COMPASS.South },\n { key: 'Q2', day: 1, month: 10, fiscal: 1, sphere: COMPASS.South },\n { key: 'Q3', day: 1, month: 1, fiscal: 0, sphere: COMPASS.South },\n { key: 'Q4', day: 1, month: 4, fiscal: 0, sphere: COMPASS.South },\n ]\n];\nexport const key = 'qtr';\nexport const scope = 'quarter';\nexport const description = 'Fiscal Quarter';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n const { yy, config: { sphere } } = this;\n const south = sphere !== COMPASS.North; // false = North, true = South\n const list = cloneify(ranges[+south]); // deep clone the range\n list.forEach(itm => itm.fiscal += yy); // calc the fiscal-year for quarter\n return getTermRange(this, list, keyOnly); // return the range\n}\n//# sourceMappingURL=term.quarter.js.map","import { cloneify } from '#core/shared/serialize.library.js';\nimport { COMPASS } from '#core/tempo.config/tempo.enum.js';\nimport { getTermRange } from './term.utils.js';\n/** definition of meteorological season ranges */\nconst ranges = [\n [\n { key: 'Spring', day: 20, month: 3, symbol: 'Flower', sphere: COMPASS.North },\n { key: 'Summer', day: 21, month: 6, symbol: 'Sun', sphere: COMPASS.North },\n { key: 'Autumn', day: 23, month: 9, symbol: 'Leaf', sphere: COMPASS.North },\n { key: 'Winter', day: 22, month: 12, symbol: 'Snowflake', sphere: COMPASS.North },\n ], [\n { key: 'Spring', day: 1, month: 9, symbol: 'Flower', sphere: COMPASS.South },\n { key: 'Summer', day: 1, month: 12, symbol: 'Sun', sphere: COMPASS.South },\n { key: 'Autumn', day: 1, month: 3, symbol: 'Leaf', sphere: COMPASS.South },\n { key: 'Winter', day: 1, month: 6, symbol: 'Snowflake', sphere: COMPASS.South },\n ], [\n { key: 'Spring', day: 1, month: 3, symbol: 'Flower', trait: 'A time of renewal and growth' },\n { key: 'Summer', day: 1, month: 6, symbol: 'Sun', trait: 'A period of heat and fruition' },\n { key: 'Autumn', day: 1, month: 9, symbol: 'Leaf', trait: 'A time for harvest and contraction' },\n { key: 'Winter', day: 1, month: 12, symbol: 'Snowflake', trait: 'A period of stillness and consolidation' },\n ]\n];\nexport const key = 'szn';\nexport const scope = 'season';\nexport const description = 'Meteorlogical season';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n const { config: { sphere } } = this;\n const south = sphere !== COMPASS.North; // false = North, true = South\n const list = cloneify(ranges[+south]);\n if (!keyOnly) {\n const cn = getTermRange(this, ranges[2], false); // get the chinese season for the current day/month\n list.forEach(item => item['CN'] = cn); // add the chinese season to each range item\n }\n return getTermRange(this, list, keyOnly);\n}\n//# sourceMappingURL=term.season.js.map","import { getTermRange } from './term.utils.js';\nimport { cloneify } from '#core/shared/serialize.library.js';\n/** definition of astrological zodiac ranges */\nconst ranges = [\n [\n { key: 'Aquarius', day: 20, month: 1, symbol: 'Ram', longitude: 300, planet: 'Uranus' },\n { key: 'Pisces', day: 19, month: 2, symbol: 'Fish', longitude: 330, planet: 'Neptune' },\n { key: 'Aries', day: 21, month: 3, symbol: 'Ram', longitude: 0, planet: 'Mars' },\n { key: 'Taurus', day: 20, month: 4, symbol: 'Bull', longitude: 30, planet: 'Venus' },\n { key: 'Gemini', day: 21, month: 5, symbol: 'Twins', longitude: 60, planet: 'Mercury' },\n { key: 'Cancer', day: 22, month: 6, symbol: 'Crab', longitude: 90, planet: 'Moon' },\n { key: 'Leo', day: 23, month: 7, symbol: 'Lion', longitude: 120, planet: 'Sun' },\n { key: 'Virgo', day: 23, month: 8, symbol: 'Maiden', longitude: 150, planet: 'Mercury' },\n { key: 'Libra', day: 23, month: 9, symbol: 'Scales', longitude: 180, planet: 'Venus' },\n { key: 'Scorpio', day: 23, month: 10, symbol: 'Scorpion', longitude: 210, planet: 'Pluto & Mars' },\n { key: 'Sagittarius', day: 22, month: 11, symbol: 'Centaur', longitude: 240, planet: 'Jupiter' },\n { key: 'Capricorn', day: 22, month: 12, symbol: 'Goat', longitude: 270, planet: 'Saturn' },\n ], [\n { key: 'Rat', traits: 'Adaptable, clever' },\n { key: 'Ox', traits: 'Diligent, strong' },\n { key: 'Tiger', traits: 'Passionate, courageous' },\n { key: 'Rabbit', traits: 'Artistic, gentle' },\n { key: 'Dragon', traits: 'Powerful, charismatic' },\n { key: 'Snake', traits: 'Wise, intuitive' },\n { key: 'Horse', traits: 'Energetic, independent' },\n { key: 'Goat', traits: 'Empathetic, calm' },\n { key: 'Monkey', traits: 'Smart, curious' },\n { key: 'Rooster', traits: 'Observant, hardworking' },\n { key: 'Dog', traits: 'Loyal, honest' },\n { key: 'Pig', traits: 'Compassionate, generous' },\n ], [\n { key: 'Wood' },\n { key: 'Fire' },\n { key: 'Earth' },\n { key: 'Metal' },\n { key: 'Water' },\n ]\n];\nexport const key = 'zdc';\nexport const scope = 'zodiac';\nexport const description = 'Astrological Zodiac sign';\n/** determine where the current Tempo instance fits within the above ranges */\nexport function define(keyOnly) {\n const list = cloneify(ranges[0]); // make a copy of the ranges array\n if (!keyOnly) {\n const cn = getChineseZodiac(this.yy); // get the chinese zodiac for the current year\n list.forEach(item => item['CN'] = cn); // add the chinese zodiac to each item\n }\n return getTermRange(this, list, keyOnly);\n}\n/** get the chinese zodiac for a given year */\nfunction getChineseZodiac(year) {\n const animalIndex = (year - 4) % 12; // calculate the animal index\n const elementIndex = Math.floor(((year - 4) % 10) / 2); // calculate the element index based on the last digit of the year\n const yinYang = year % 2 === 0 ? 'Yang' : 'Yin'; // determine Yin or Yang\n return {\n animal: ranges[1][animalIndex].key,\n traits: ranges[1][animalIndex].traits,\n element: ranges[2][elementIndex].key,\n yinYang: yinYang\n };\n}\n//# sourceMappingURL=term.zodiac.js.map","import { getTermRange } from './term.utils.js';\n/** definition of daily time periods */\nconst ranges = [\n { key: 'midnight', hour: 0 },\n { key: 'early', hour: 4 },\n { key: 'morning', hour: 8 },\n { key: 'midmorning', hour: 10 },\n { key: 'midday', hour: 12 },\n { key: 'afternoon', hour: 15, minute: 30 },\n { key: 'evening', hour: 18 },\n { key: 'night', hour: 20 },\n];\nexport const key = 'per';\nexport const scope = 'period';\nexport const description = 'Daily time period';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n return getTermRange(this, ranges, keyOnly);\n}\n//# sourceMappingURL=term.timeline.js.map","/**\n * Built-in term plugin registrations.\n *\n * This module exports a registration function to be called by tempo.class.ts.\n *\n * returns an array of Terms to be loaded into Tempo.#terms\n */\nimport * as qtr from './term.quarter.js';\nimport * as szn from './term.season.js';\nimport * as zdc from './term.zodiac.js';\nimport * as per from './term.timeline.js';\nexport default [\n { key: qtr.key, scope: qtr.scope, description: qtr.description, define: qtr.define },\n { key: szn.key, scope: szn.scope, description: szn.description, define: szn.define },\n { key: zdc.key, scope: zdc.scope, description: zdc.description, define: zdc.define },\n { key: per.key, scope: per.scope, description: per.description, define: per.define },\n];\n//# sourceMappingURL=term.import.js.map","import { looseIndex } from '#core/shared/object.library.js';\nimport { secure } from '#core/shared/utility.library.js';\n// BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW\n// TEMPO functionality heavily depends on these patterns\n/** common RegExp patterns */\nexport const Match = {\n /** match all {} pairs, if they start with a word char */ braces: /{([\\w]+(?:\\.[\\w]+)*)}/g,\n /** named capture-group, if it starts with a letter */ captures: /\\(\\?<([a-zA-Z][\\w]*)>(.*?)(?=) */ modifier: /[\\+\\-\\<\\>][\\=]?|this|next|prev|last/,\n /** offset post keywords (ago|hence) */ affix: /ago|hence/,\n /** strip out these characters from a string */ strips: /\\(|\\)/g,\n /** whitespace characters */ spaces: /\\s+/g,\n /** Z character */ zed: /^Z$/,\n};\n/** Tempo Symbol registry */\nexport const Token = looseIndex()({\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols\n /** year */ yy: Symbol('yy'),\n /** month */ mm: Symbol('mm'),\n /** day */ dd: Symbol('dd'),\n /** hour */ hh: Symbol('hh'),\n /** minute */ mi: Symbol('mi'),\n /** second */ ss: Symbol('ss'),\n /** fraction */ ff: Symbol('ff'),\n /** meridiem */ mer: Symbol('mer'),\n /** short weekday name */ www: Symbol('www'),\n /** relative-suffix */ afx: Symbol('afx'),\n /** time-suffix */ sfx: Symbol('sfx'),\n /** time unit */ unt: Symbol('unt'),\n /** separator */ sep: Symbol('sep'),\n /** modifier */ mod: Symbol('mod'),\n /** generic number */ nbr: Symbol('nbr'),\n /** Tempo event */ evt: Symbol('evt'),\n /** Tempo period */ per: Symbol('per'),\n /** time zone offset */ tzd: Symbol('tzd'),\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Layout Symbols\n /** date */ dt: Symbol('date'),\n /** time */ tm: Symbol('time'),\n /** date and time */ dtm: Symbol('dateTime'),\n /** day-month-year */ dmy: Symbol('dayMonthYear'),\n /** month-day-year */ mdy: Symbol('monthDayYear'),\n /** year-month-day */ ymd: Symbol('yearMonthDay'),\n /** day of month offset */ off: Symbol('offset'),\n /** weekDay */ wkd: Symbol('weekDay'),\n /** relative offset (years, days, hours, etc) */ rel: Symbol('relativeOffset'),\n /** timezone/calendar brackets */ brk: Symbol('brackets'),\n});\n/**\n * user will need to know these in order to configure their own patterns\n * Tempo.Snippet is a simple regex pattern object\t\t\t\t\t\te.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ }\n * Tempo.Layout is a string-combination of Snippet names\t\te.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?'\n * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex.\n * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument\n */\n/**\n * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy')\n */\n// Note: computed Components ('evt', 'per') are added during 'Tempo.init()' (for static) and/or 'new Tempo()' (per instance)\nexport const Snippet = looseIndex()({\n [Token.yy]: /(?([0-9]{2})?[0-9]{2})/, // arbitrary upper-limit of yy=9999\n [Token.mm]: /(?[0\\s]?[1-9]|1[0-2]|Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)/, // month-name (abbrev or full) or month-number 01-12\n [Token.dd]: /(?
[0\\s]?[1-9]|[12][0-9]|3[01])(?:\\s?(?:st|nd|rd|th))?/, // day-number 01-31\n [Token.hh]: /(?2[0-4]|[01]?[0-9])/, // hour-number 00-24\n [Token.mi]: /(\\:(?[0-5][0-9]))/, // minute-number 00-59\n [Token.ss]: /(\\:(?[0-5][0-9]))/, // seconds-number 00-59\n [Token.ff]: /(\\.(?[0-9]{1,9}))/, // fractional-seconds up-to 9-digits\n [Token.mer]: /(\\s*(?am|pm))/, // meridiem suffix (am,pm)\n [Token.sfx]: /((?:{sep}+|T)({tm}){tzd}?)/, // time-pattern suffix 'T {tm} Z'\n [Token.wkd]: /(?Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)/, // day-name (abbrev or full)\n [Token.tzd]: /(?Z|(?:\\+(?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:00)|-(?:(?:0[0-9]|1[0-1]):?[0-5][0-9]|12:00)))/, // time-zone offset\t+14:00 to -12:00\n [Token.nbr]: /(?[0-9]*)/, // modifier count\n [Token.afx]: new RegExp(`((s)? (?${Match.affix.source}))?{sep}?`), // affix optional plural 's' and (ago|hence)\n [Token.mod]: new RegExp(`((?${Match.modifier.source})?{nbr} *)`), // modifier (+,-,<,<=,>,>=) plus optional offset-count\n [Token.sep]: new RegExp(`(?:${Match.separator.source})`), // date-input separator character \"/\\\\-., \" (non-capture group)\n [Token.unt]: /(?year|month|week|day|hour|minute|second|millisecond)(?:s)?/, // useful for '2 days ago' etc\n [Token.brk]: /(\\[(?[^\\]]+)\\](?:\\[(?[^\\]]+)\\])?)?/, // timezone/calendar brackets [...]\n});\n/**\n * a {layout} is a Record of snippet-combinations describing an input DateTime argument\n * the Layout's keys are in the order that they will be checked against an input value\n */\nexport const Layout = looseIndex()({\n [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))', // calendar or event\n [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period\n [Token.dtm]: '({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?', // calendar/event and clock/period\n [Token.dmy]: '({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?', // day-month(-year)\n [Token.mdy]: '({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?', // month-day(-year)\n [Token.ymd]: '({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?', // year-month(-day)\n [Token.wkd]: '{mod}?{wkd}{afx}?{sfx}?', // special layout (no {dt}!) used for weekday calcs (only one that requires {wkd} pattern)\n [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset\n [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago)\n});\n/**\n * an {event} is a Record of regex-pattern-like-string keys that describe Date strings.\n * values can be a string or a function.\n * if assigning a function, use standard 'function()' syntax to allow for 'this' binding.\n * also, a function should always have a .toString() method which returns a parse-able Date string\n */\nexport const Event = looseIndex()({\n 'new.?years? ?eve': '31 Dec',\n 'nye': '31 Dec',\n 'new.?years?( ?day)?': '01 Jan',\n 'ny': '01 Jan',\n 'christmas ?eve': '24 Dec',\n 'christmas': '25 Dec',\n 'xmas ?eve': '24 Dec',\n 'xmas': '25 Dec',\n 'now': function () { return this.toPlainDateTime(); },\n 'today': function () { return this.toPlainDate(); },\n 'tomorrow': function () { return this.toPlainDate().add({ days: 1 }); },\n 'yesterday': function () { return this.toPlainDate().add({ days: -1 }); },\n});\n/**\n * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings.\n * values can be a string or a function.\n * if using a function, use regular 'function()' syntax to allow for 'this' binding.\n */\nexport const Period = looseIndex()({\n 'mid[ -]?night': '24:00',\n 'morning': '8:00',\n 'mid[ -]?morning': '10:00',\n 'mid[ -]?day': '12:00',\n 'noon': '12:00',\n 'after[ -]?noon': '3:00pm',\n 'evening': '18:00',\n 'night': '20:00',\n});\n/**\n * a {timeZone} alias dictionary mapping common abbreviations to IANA strings.\n * Tempo will check this registry to convert abbreviations before passing them to Temporal.\n */\nexport const TimeZone = looseIndex()({\n 'utc': 'UTC',\n 'gmt': 'Europe/London',\n 'est': 'America/New_York',\n 'cst': 'America/Chicago',\n 'mst': 'America/Denver',\n 'pst': 'America/Los_Angeles',\n 'aest': 'Australia/Sydney',\n 'acst': 'Australia/Adelaide',\n 'awst': 'Australia/Perth',\n 'nzt': 'Pacific/Auckland',\n 'cet': 'Europe/Paris',\n 'eet': 'Europe/Helsinki',\n 'ist': 'Asia/Kolkata',\n 'npt': 'Asia/Kathmandu',\n 'jst': 'Asia/Tokyo',\n});\n/** Reasonable default options for initial Tempo config */\nexport const Default = secure({\n /** log to console */ debug: false,\n /** catch or throw Errors */ catch: false,\n /** used to parse two-digit years*/ pivot: 75, /** @link https://en.wikipedia.org/wiki/Date_windowing */\n /** precision to measure timestamps (ms | us) */ timeStamp: 'ms',\n /** calendaring system */ calendar: 'iso8601',\n /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https://en.wikipedia.org/wiki/Date_format_by_country */\n /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']],\n});\n//# sourceMappingURL=tempo.default.js.map","import { asString } from '#core/shared/coercion.library.js';\nimport { extract } from '#core/shared/object.library.js';\nimport { ownEntries } from '#core/shared/reflection.library.js';\nimport { stringify } from '#core/shared/serialize.library.js';\nimport { isNumber, isDate, isTempo, isObject, isDefined, isUndefined, isFunction, nullToValue } from '#core/shared/type.library.js';\n// adapted from https://jsbin.com/insert/4/edit?js,output\n/** insert a value into an Array by its sorted position */\nexport const sortInsert = (arr = [], val, key) => {\n const obj = isObject(val) && isDefined(key); // array of Objects\n let low = 0, high = arr.length;\n while (low < high) {\n const mid = (low + high) >>> 1; // divide by 2\n const source = obj\n ? arr[mid][key] // array of Object values\n : arr[mid]; // assume Primitive values\n const target = obj\n ? val[key]\n : val;\n if (source < target)\n low = mid + 1;\n else\n high = mid;\n }\n arr.splice(low, 0, val); // mutate original Array\n return arr;\n};\n/** provide a sort-function to order a set of keys */\nexport function sortBy(...keys) {\n const sortOptions = keys // coerce string => SortBy\n .flat() // flatten Array-of-Array\n .map(key => isObject(key) ? key : { field: stringify(key) }); // build Array of sort-options\n return (left, right) => {\n let result = 0; // 0 = same, -1 = leftright\n sortOptions.forEach(key => {\n if (result === 0) { // no need to look further if result !== 0\n const dir = key.dir === 'desc' ? -1 : 1;\n const field = key.field + (key.index ? `[${key.index}]` : '');\n const valueA = extract(left, field, nullToValue(key.default, 0));\n const valueB = extract(right, field, nullToValue(key.default, 0));\n switch (true) {\n case isNumber(valueA) && isNumber(valueB):\n case isDate(valueA) && isDate(valueB):\n case isTempo(valueA) && isTempo(valueB):\n result = dir * (valueA - valueB);\n break;\n default:\n result = dir * asString(valueA)?.localeCompare(asString(valueB));\n break;\n }\n }\n });\n return result;\n };\n}\n/** return an array sorted-by a series of keys */\nexport function sortKey(array, ...keys) {\n return array.sort(sortBy(...keys));\n}\nexport function byKey(arr, fnKey, ...keys) {\n if (isFunction(fnKey))\n return Object.groupBy(arr, fnKey);\n const keyed = [fnKey] // mapFn is a keyof T\n .concat(keys) // append any trailing keyof T[]\n .flat(); // flatten Array-of-Array\n return Object.groupBy(arr, itm => // group an array into an object with named keys\n keyed\n .map(key => isUndefined(itm[key]) ? '' : stringify(itm[key]))\n .join('.'));\n}\nexport function byLkp(arr, fnKey, ...keys) {\n const group = isFunction(fnKey)\n ? byKey(arr, fnKey) // group by the callback function\n : byKey(arr, fnKey, ...keys); // group by the list of keys\n return ownEntries(group)\n .reduce((acc, [key, grp]) => Object.assign(acc, { [key]: grp?.pop() }), {});\n}\n//# sourceMappingURL=array.library.js.map","import { trimAll, toProperCase } from '#core/shared/string.library.js';\nimport { byKey, byLkp, sortKey } from '#core/shared/array.library.js';\nimport { asArray } from '#core/shared/coercion.library.js';\n// Prototype extensions\n// Remember to define any imports as a Function Declaration (not a Function Expression)\n// so that they are 'hoisted' prior to extending a prototype\n/**\n * extend an Object's prototype to include new method, if no clash\n */\nexport const patch = (proto, property, method) => {\n if (Object.hasOwn(proto.prototype, property)) { // if already defined,\n if (trimAll(method.toString()) !== trimAll(proto.prototype?.[property]?.toString()))\n console.warn(`${proto.name}.${property} already defined`); // show warning if different method definition\n }\n else {\n Object.defineProperty(proto.prototype, property, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: method,\n });\n }\n};\npatch(String, 'trimAll', function (pat) { return trimAll(this, pat); });\npatch(String, 'toProperCase', function () { return toProperCase(this); });\nfunction sorted(...keys) { return sortKey(this, ...keys); }\npatch(Array, 'orderBy', sorted); // order array by named keys\npatch(Array, 'sortBy', sorted); // sort array by named keys\nfunction keyed(...keys) { return byKey(this, ...keys); }\nfunction lookup(...keys) { return byLkp(this, ...keys); }\npatch(Array, 'keyedBy', keyed); // reduce array by named keys\npatch(Array, 'lookupBy', lookup); // reduce array by named keys, only one entry per key\npatch(Array, 'tap', function (fn) {\n fn(this); // run an arbitrary function\n return this; // then return the original array\n});\npatch(Array, 'clear', function () {\n this.fill(null).length = 0; // wipe the contents, then set the 'length' to zero\n return this;\n});\npatch(Array, 'distinct', function (mapfn) {\n return mapfn\n ? this.map(mapfn).distinct() // run the mapping selector, then recurse\n : Array.from(new Set(this)); // eliminate duplicates\n});\npatch(Array, 'cartesian', function (...args) {\n const [a, b = [], ...c] = args.length === 0 ? this : args;\n const cartFn = (a, b) => asArray([]).concat(...a.map(d => b.map(e => asArray([]).concat(d, e))));\n return b.length\n ? this.cartesian(cartFn(a, b), ...c) // run the cartFn function, then recurse\n : asArray(a || []); // return the collated result\n});\n//# sourceMappingURL=prototype.library.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport '#core/temporal.polyfill.js'; // side-effect runtime check for Temporal\n// #region library modules~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { Logify } from '#core/shared/logify.class.js';\nimport { ifDefined } from '#core/shared/object.library.js';\nimport { secure } from '#core/shared/utility.library.js';\nimport { Immutable, Serializable } from '#core/shared/class.library.js';\nimport { asArray, asNumber, asInteger, isNumeric, ifNumeric } from '#core/shared/coercion.library.js';\nimport { cleanify, stringify } from '#core/shared/serialize.library.js';\nimport { getStorage, setStorage } from '#core/shared/storage.library.js';\nimport { ownKeys, ownEntries, getAccessors, omit } from '#core/shared/reflection.library.js';\nimport { getProxy } from '#core/shared/proxy.library.js';\nimport { getContext, CONTEXT } from '#core/shared/utility.library.js';\nimport { pad, singular, toProperCase, trimAll } from '#core/shared/string.library.js';\nimport { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#core/shared/type.library.js';\nimport * as enums from '#core/tempo.config/tempo.enum.js';\nimport registerTerms from '#core/tempo.config/terms/term.import.js';\nimport { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#core/tempo.config/tempo.default.js';\nimport '#core/shared/prototype.library.js'; // patch prototypes\n// #region Const variables\n/** key to use for storage / globalThis Symbol */ export const $Tempo = Symbol.for('$Tempo');\n/** current execution context*/ const Context = getContext();\n// #endregion Const variables\n/**\n * # Tempo\n * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects.\n * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API.\n */\nlet Tempo = (() => {\n var _a, _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_conformToGroups;\n let _classDecorators = [Serializable, Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Tempo = _a = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Tempo\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Tempo = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n // #region Static enum properties~~~~~~~~~~~~~~~~~~~~~~~~~\n /** Weekday names (short-form) */ static get WEEKDAY() { return enums.WEEKDAY; }\n /** Weekday names (long-form) */ static get WEEKDAYS() { return enums.WEEKDAYS; }\n /** Month names (short-form) */ static get MONTH() { return enums.MONTH; }\n /** Month names (long-form) */ static get MONTHS() { return enums.MONTHS; }\n /** Time durations as seconds (singular) */ static get DURATION() { return enums.DURATION; }\n /** Time durations as milliseconds (plural) */ static get DURATIONS() { return enums.DURATIONS; }\n /** Quarterly Seasons */ static get SEASON() { return enums.SEASON; }\n /** Compass cardinal points */ static get COMPASS() { return enums.COMPASS; }\n /** Tempo to Temporal DateTime Units map */ static get ELEMENT() { return enums.ELEMENT; }\n /** Pre-configured format {name -> string} pairs */ static get FORMAT() { return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.formats; }\n /** some useful Dates */ static get LIMIT() { return enums.LIMIT; }\n static {\n // #endregion\n // #region Static private properties~~~~~~~~~~~~~~~~~~~~~~\n _Tempo_dbg = { value: new Logify('Tempo', {\n debug: Default?.debug ?? false,\n catch: Default?.catch ?? false\n }) };\n }\n static {\n /** Tempo state for the global configuration */ _Tempo_global = { value: {} };\n }\n static {\n /** a collection of parse rule-matches */ _Tempo_pending = { value: void 0 };\n }\n static {\n /** cache for next-available 'usr' Token key */ _Tempo_usrCount = { value: 0 };\n }\n static {\n /** mutable list of registered term plugins */ _Tempo_terms = { value: [] };\n }\n static {\n /** try to infer hemisphere using the timezone's daylight-savings setting */\n _Tempo_setSphere = { value: (shape, options) => {\n if (isUndefined(shape.config.timeZone) || __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, options, 'sphere'))\n return shape.config.sphere; // already specified or no timeZone to calculate from\n // use a fixed date (2024-01-01) to compare offsets for hemisphere detection\n const zdt = new Temporal.ZonedDateTime(BigInt(1_704_067_200) * BigInt(1_000_000_000), shape.config.timeZone);\n const jan = zdt.with({ day: 1, month: 1 }).offsetNanoseconds;\n const jun = zdt.with({ day: 1, month: 6 }).offsetNanoseconds;\n const dst = Math.sign(jan - jun); // timeZone offset difference between Jan and Jun\n switch (dst) {\n case -1:\n return Tempo.COMPASS.North; // clock moves backward in Northern hemisphere\n case 1:\n return Tempo.COMPASS.South; // clock moves forward in Southern hemisphere\n case 0:\n default:\n return void 0; // timeZone does not observe DST\n }\n } };\n }\n static {\n /** properCase week-day / calendar-month */\n _Tempo_prefix = { value: (str) => toProperCase(String(str).substring(0, 3)) };\n }\n static {\n /** get first Canonical name of a supplied locale */\n _Tempo_locale = { value: (locale) => {\n let language;\n try { // lookup locale\n language = Intl.getCanonicalLocales(locale.replace('_', '-'))[0];\n }\n catch (error) { } // catch unknown locale\n const global = Context.global;\n return language ??\n global?.navigator?.languages?.[0] ?? // fallback to current first navigator.languages[]\n global?.navigator?.language ?? // else navigator.language\n Default.locale ?? // else default locale\n locale; // cannot determine locale\n } };\n }\n // #endregion Static private methods\n // #region Static public methods~~~~~~~~~~~~~~~~~~~~~~~~~~\n /**\n * Bootstrap the library with a Custom Global Discovery object.\n *\n * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern\n * and automatically calls `Tempo.init()` to apply the discovered configuration.\n *\n * @param config - The Global Discovery object to register.\n * @returns The resolved global configuration.\n */\n static discover(config) {\n globalThis[$Tempo] = config;\n return this.init();\n }\n /**\n * Initializes the global default configuration for all subsequent `Tempo` instances.\n *\n * Settings are inherited in this priority:\n * 1. Reasonable library defaults (defined in tempo.config.js)\n * 2. Persistent storage (e.g. localStorage), if available.\n * 3. `options` provided to this method.\n *\n * @param options - Configuration overrides to apply globally.\n * @returns The resolved global configuration.\n */\n static init(options = {}) {\n if (isEmpty(options)) { // if no options supplied, reset all\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse = {\n snippet: Object.assign({}, Snippet),\n layout: Object.assign({}, Layout),\n event: Object.assign({}, Event),\n period: Object.assign({}, Period),\n mdyLocales: __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, Default.mdyLocales),\n mdyLayouts: asArray(Default.mdyLayouts),\n pivot: Default.pivot,\n };\n const { timeZone, calendar } = Intl.DateTimeFormat().resolvedOptions();\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config = Object.assign({}, omit({ ...Default }, ...enums.PARSE.keys()), // use Default as base, omit parse-related\n {\n calendar,\n timeZone,\n locale: __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_locale).call(Tempo),\n discovery: Symbol.keyFor($Tempo),\n formats: Object.create(enums.FORMAT),\n scope: 'global'\n });\n __classPrivateFieldSet(Tempo, _classThis, 0, \"f\", _Tempo_usrCount); // reset user-key counter\n for (const key of Object.keys(Token)) // purge user-allocated Tokens\n if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys\n delete Token[key];\n Tempo.addTerm(...registerTerms); // register built-in term plugins\n const storeKey = Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), $Tempo));\n }\n else {\n const discovery = options.discovery ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.discovery ?? Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), discovery), options);\n }\n if (Context.type === CONTEXT.Browser || options.debug === true)\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(Tempo.config, 'Tempo:', __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n return Tempo.config;\n }\n /** release global config and reset library to defaults */\n static [(_Tempo_proto = function _Tempo_proto(obj) { return Object.getPrototypeOf(obj); }, _Tempo_hasOwn = function _Tempo_hasOwn(obj, key) { return Object.hasOwn(obj, key); }, _Tempo_isLocal = function _Tempo_isLocal(shape) { return shape.config.scope === 'local'; }, _Tempo_create = function _Tempo_create(obj, name) { return Object.create(__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, obj)[name]); }, _Tempo_setEvents = function _Tempo_setEvents(shape) {\n const events = ownEntries(shape.parse.event, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'event') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'isMonthDay'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = events\n .map(([pat, _], idx) => `(?<${src}evt${idx}>${pat})`) // assign a number to the pattern\n .join('|'); // make an 'Or' pattern for the event-keys\n if (groups) {\n const protoEvt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.evt]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoEvt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.evt, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n if (shape.parse.isMonthDay) {\n const protoDt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.layout)[Token.dt];\n const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})';\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || localDt !== protoDt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n shape.parse.layout = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'layout');\n Object.defineProperty(shape.parse.layout, Token.dt, {\n value: localDt,\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_setPeriods = function _Tempo_setPeriods(shape) {\n const periods = ownEntries(shape.parse.period, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'period'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = periods\n .map(([pat, _], idx) => `(?<${src}per${idx}>${pat})`) // {pattern} is the 1st element of the tuple\n .join('|'); // make an 'or' pattern for the period-keys\n if (groups) {\n const protoPer = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.per]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoPer) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.per, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_isMonthDay = function _Tempo_isMonthDay(shape) {\n const monthDay = [...asArray(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.mdyLocales)];\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales'))\n monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global)\n return monthDay.some(mdy => {\n const tzs = mdy.timeZones ?? mdy.getTimeZones?.() ?? [];\n return tzs.includes(shape.config.timeZone);\n });\n }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) {\n const layouts = ownEntries(shape.parse.layout); // get entries of Layout Record\n const swap = shape.parse.mdyLayouts; // get the swap-tuple\n let chg = false; // no need to rebuild, if no change\n swap\n .forEach(([dmy, mdy]) => {\n const idx1 = layouts.findIndex(([key]) => key.description === dmy); // 1st swap element exists in {layouts}\n const idx2 = layouts.findIndex(([key]) => key.description === mdy); // 2nd swap element exists in {layouts}\n if (idx1 === -1 || idx2 === -1)\n return; // no pair to swap\n const swap1 = (idx1 < idx2) && shape.parse.isMonthDay; // we prefer {mdy} and the 1st tuple was found earlier than the 2nd\n const swap2 = (idx1 > idx2) && !shape.parse.isMonthDay; // we dont prefer {mdy} and the 1st tuple was found later than the 2nd\n if (swap1 || swap2) { // since {layouts} is an array, ok to swap by-reference\n [layouts[idx1], layouts[idx2]] = [layouts[idx2], layouts[idx1]];\n chg = true;\n }\n });\n if (chg)\n shape.parse.layout = Object.fromEntries(layouts); // rebuild Layout in new parse order\n }, _Tempo_setConfig = function _Tempo_setConfig(shape, ...options) {\n const mergedOptions = Object.assign({}, ...options);\n if (isEmpty(mergedOptions)) // nothing to do\n return;\n if (mergedOptions.store) // check for local-storage\n Object.assign(mergedOptions, { ...Tempo.readStore(mergedOptions.store), ...mergedOptions });\n /** helper to normalize snippet/layout Options into the target Config */\n const collect = (target, value, convert) => {\n const itm = asType(value);\n target ??= {};\n switch (itm.type) {\n case 'Object':\n ownEntries(itm.value)\n .forEach(([k, v]) => target[Tempo.getSymbol(k)] = convert(v));\n break;\n case 'String':\n case 'RegExp':\n target[Tempo.getSymbol()] = convert(itm.value);\n break;\n case 'Array':\n itm.value.forEach(elm => collect(target, elm, convert));\n break;\n }\n };\n ownEntries(mergedOptions)\n .forEach(([optKey, optVal]) => {\n if (isUndefined(optVal))\n return; // skip undefined values\n const arg = asType(optVal);\n switch (optKey) {\n case 'snippet':\n case 'layout':\n case 'event':\n case 'period':\n // lazy-shadowing: only create local object if it doesn't already exist on local shape\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, optKey))\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, optKey);\n const rule = shape.parse[optKey];\n if (['snippet', 'layout'].includes(optKey)) {\n collect(rule, arg.value, v => optKey === 'snippet'\n ? isRegExp(v) ? v : new RegExp(v)\n : isRegExp(v) ? v.source : v);\n }\n else {\n asArray(arg.value)\n .forEach(elm => ownEntries(elm).forEach(([key, val]) => rule[key] = val));\n }\n break;\n case 'mdyLocales':\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, arg.value);\n break;\n case 'mdyLayouts': // these are the 'layouts' that need to swap parse-order\n shape.parse[optKey] = asArray(arg.value);\n break;\n case 'pivot':\n shape.parse[\"pivot\"] = Number(arg.value);\n break;\n case 'config':\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, shape, arg.value);\n break;\n case 'timeZone':\n const zone = String(arg.value).toLowerCase();\n shape.config.timeZone = TimeZone[zone] ?? arg.value;\n break;\n case 'formats':\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.config, 'formats'))\n shape.config.formats = shape.config.formats.extend({}); // shadow parent prototype\n if (isObject(arg.value))\n shape.config.formats = shape.config.formats.extend(arg.value);\n break;\n case 'discovery':\n shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal;\n break;\n case 'plugins':\n asArray(optVal).forEach(p => this.extend(p));\n break;\n case 'anchor':\n break; // internal anchor used for relativity parsing\n default: // else just add to config\n Object.assign(shape.config, { [optKey]: optVal });\n break;\n }\n });\n const isMonthDay = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isMonthDay).call(Tempo, shape);\n if (isMonthDay !== __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local'\n shape.parse.isMonthDay = isMonthDay;\n shape.config.sphere = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_setSphere).call(Tempo, shape, mergedOptions);\n if (isDefined(shape.parse.mdyLayouts))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_swapLayout).call(Tempo, shape);\n if (isDefined(shape.parse.event))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setEvents).call(Tempo, shape);\n if (isDefined(shape.parse.period))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPeriods).call(Tempo, shape);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPatterns).call(Tempo, shape); // setup Regex DateTime patterns\n }, _Tempo_mdyLocales = function _Tempo_mdyLocales(value) {\n return asArray(value)\n .map(mdy => new Intl.Locale(mdy))\n .map(mdy => ({ locale: mdy.baseName, timeZones: mdy.getTimeZones?.() ?? [] }));\n }, _Tempo_setDiscovery = function _Tempo_setDiscovery(shape, key = shape.config.discovery ?? $Tempo) {\n const sym = isString(key) ? Symbol.for(key) : key;\n const discovery = globalThis[sym];\n if (!isObject(discovery))\n return {};\n // 1. Process TimeZones (normalize to lowercase for lookup)\n const timeZones = discovery.timeZones ?? {};\n for (const [key, value] of Object.entries(timeZones))\n TimeZone[key.toLowerCase()] = value;\n // 2. Process Terms\n if (discovery.terms)\n Tempo.addTerm(...asArray(discovery.terms));\n // 3. Process Formats\n if (discovery.formats)\n shape.config.formats = shape.config.formats.extend(discovery.formats);\n // 4. Process Plugins\n if (discovery.plugins)\n asArray(discovery.plugins).forEach(p => this.extend(p));\n // 4. Process Options\n let opts = discovery.options || {};\n return isFunction(opts) ? opts() : opts;\n }, _Tempo_setPatterns = function _Tempo_setPatterns(shape) {\n const snippet = shape.parse.snippet;\n // if local and no snippet or layout overrides, we can just use the prototype's patterns\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n return;\n // ensure we have our own Map to mutate (shadow if local)\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'pattern'))\n shape.parse.pattern = new Map();\n shape.parse.pattern.clear(); // reset {pattern} Map\n for (const [sym, layout] of ownEntries(shape.parse.layout, true))\n shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet));\n }, Symbol.dispose)]() { Tempo.init(); }\n /**\n * Extends the Tempo class with new functionality.\n * Plugins can add static or instance methods to the library.\n */\n static extend(plugin, options) {\n const p = plugin;\n if (!p.installed) {\n p(options, this, (val) => new this(val));\n p.installed = true;\n }\n return this;\n }\n /** Reads options from persistent storage (e.g., localStorage). */\n static readStore(key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return getStorage(key, {});\n }\n /** Writes configuration into persistent storage. */\n static writeStore(config, key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return setStorage(key, config);\n }\n /** lookup or registers a new `Symbol` for a given key. */\n static getSymbol(key) {\n var _b, _c;\n if (isUndefined(key)) {\n const usr = `usr.${__classPrivateFieldSet(_b = Tempo, _classThis, (_c = __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_usrCount), ++_c), \"f\", _Tempo_usrCount)}`; // allocate a prefixed 'user' key\n return Token[usr] = Symbol(usr); // add to Symbol register\n }\n if (isSymbol(key))\n return key;\n if (isString(key) && key.includes('.')) {\n const description = key.split('.').pop(); // use last segment as description\n return Token[key] ??= Symbol(description);\n }\n return Token[key] ?? Symbol.for(`$Tempo.${key}`);\n }\n /** translates {layout} into an anchored, case-insensitive RegExp. */\n static regexp(layout, snippet) {\n // helper function to replace {name} placeholders with their corresponding snippets\n function matcher(str, depth = 0) {\n if (depth > 12)\n return isRegExp(str) ? str.source : str; // depth guard\n let source = isRegExp(str) ? str.source : str;\n if (isRegExpLike(source)) // string that looks like a RegExp\n source = source.substring(1, source.length - 1); // remove the leading/trailing \"/\"\n if (source.startsWith('^') && source.endsWith('$'))\n source = source.substring(1, source.length - 1); // remove the leading/trailing anchors (^ $)\n return source.replace(Match.braces, (match, name) => {\n const token = Tempo.getSymbol(name); // get the symbol for this {name}\n const customs = snippet?.[token]?.source ?? snippet?.[name]?.source;\n const globals = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[token]?.source ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[name]?.source;\n const layout = Layout[token]; // get resolution source (layout)\n let res = customs ?? globals ?? layout; // get the snippet/layout source\n if (isNullish(res) && name.includes('.')) { // if no definition found, try fallback\n const prefix = name.split('.')[0]; // get the base token name\n const pToken = Tempo.getSymbol(prefix);\n res = snippet?.[pToken]?.source ?? snippet?.[prefix]?.source\n ?? Snippet[pToken]?.source ?? Snippet[prefix]?.source\n ?? Layout[pToken];\n }\n if (res && name.includes('.')) { // wrap dotted extensions for identification\n const safeName = name.replace(/\\./g, '_');\n if (!res.startsWith(`(?<${safeName}>`))\n res = `(?<${safeName}>${res})`;\n }\n return (isNullish(res) || res === match) // if no definition found,\n ? match // return the original match\n : matcher(res, depth + 1); // else recurse to see if snippet contains embedded \"{}\" pairs\n });\n }\n layout = matcher(layout); // initiate the layout-parse\n return new RegExp(`^(${layout})$`, 'i'); // translate the source into a regex\n }\n /** Compares two `Tempo` instances or date-time values. */\n static compare(tempo1, tempo2) {\n const one = new Tempo(tempo1), two = new Tempo(tempo2);\n return Number((one.nano > two.nano) || -(one.nano < two.nano)) + 0;\n }\n /** global Tempo configuration */\n static get config() {\n return getProxy(omit({ ...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config }, 'value'));\n }\n /** global discovery configuration */\n static get discovery() {\n const sym = Symbol.for(this.config.discovery);\n return getProxy(omit({ ...globalThis[sym], scope: 'discovery' }, 'value'));\n }\n /**\n * Returns a snapshot of the configuration layers used by Tempo.\n * Useful for debugging how the final configuration is built.\n */\n static get options() {\n const keyFor = this.config.store ?? Symbol.keyFor($Tempo);\n return {\n default: this.default,\n discovery: this.discovery,\n storage: getProxy(Object.assign({ key: keyFor, scope: 'storage' }, omit(Tempo.readStore(keyFor), 'value'))),\n global: this.config,\n };\n }\n static from(tempo, options) { return new this(tempo, options); }\n static now() { return Temporal.Now.instant().epochNanoseconds; }\n /** static Tempo.terms getter */\n static get terms() {\n return secure(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms)\n .map(({ define, ...rest }) => rest)); // omit the 'define' method\n }\n /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */\n static addTerm(...plugin) {\n asArray(plugin)\n .flat(1)\n .forEach(p => {\n if (!__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).some(t => t.key === p.key)) // check for duplicate key\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).push(p); // append; silently ignore duplicates\n });\n }\n /** static Tempo properties getter */\n static get properties() {\n return secure(getAccessors(Tempo)\n .filter(acc => getType(acc) !== 'Symbol')); // omit any Symbol properties\n }\n /** Tempo initial default settings */\n static get default() {\n return secure({ ...Default, scope: 'default', timeZone: TimeZone });\n }\n /**\n * configuration governing the static 'rules' used when parsing Tempo.DateTime argument\n */\n static get parse() {\n const parse = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse;\n return secure({\n ...parse, // spread primitives like {pivot}\n snippet: { ...parse.snippet }, // spread nested objects\n layout: { ...parse.layout },\n event: { ...parse.event },\n period: { ...parse.period },\n mdyLocales: [...parse.mdyLocales],\n mdyLayouts: [...parse.mdyLayouts],\n });\n }\n /** iterate over Tempo properties */\n static [(_Tempo_conformToGroups = function _Tempo_conformToGroups(tempo) {\n const groups = {};\n if ('year' in tempo) {\n groups.yy = tempo.year.toString().padStart(4, '0');\n groups.mm = tempo.month.toString().padStart(2, '0');\n groups.dd = tempo.day.toString().padStart(2, '0');\n }\n if ('hour' in tempo) {\n groups.hh = tempo.hour.toString().padStart(2, '0');\n groups.mi = tempo.minute.toString().padStart(2, '0');\n groups.ss = tempo.second.toString().padStart(2, '0');\n groups.ff = tempo.nanosecond.toString().padStart(9, '0');\n }\n return groups;\n }, Symbol.iterator)]() {\n return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters'\n }\n // #endregion Static public methods\n // #region Instance symbols~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** allow for auto-convert of Tempo to BigInt, Number or String */\n [Symbol.toPrimitive](hint) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.config, getType(this), '.hint: ', hint);\n switch (hint) {\n case 'string': return this.toString(); // ISO 8601 string\n case 'number': return this.epoch.ms; // Unix epoch (milliseconds)\n default: return this.nano; // Unix epoch (nanoseconds)\n }\n }\n /** iterate over instance formats */\n [Symbol.iterator]() {\n return ownEntries(this.#fmt)[Symbol.iterator](); // instance Iterator over tuple of FormatType[]\n }\n get [Symbol.toStringTag]() {\n return 'Tempo'; // hard-coded to avoid minification mangling\n }\n // #endregion Instance symbols\n // #region Instance properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** constructor tempo */ #tempo;\n /** constructor options */ #options = {};\n /** instantiation Temporal Instant */ #now;\n /** underlying Temporal ZonedDateTime */ #zdt;\n /** temporary anchor used during parsing */ #anchor;\n /** prebuilt formats, for convenience */ #fmt = {};\n /** instance term plugins */ #term = Object.create(null);\n /** instance values to complement static values */ #local = {\n /** instance configuration */ config: {},\n /** instance parse rules (only populated if provided) */ parse: { result: [] }\n };\n constructor(tempo, options = {}) {\n this.#now = Temporal.Now.instant(); // stash current Instant\n [this.#tempo, this.#options] = this.#swap(tempo, options); // swap arguments around, if arg1=Options or Temporal-like\n this.#setLocal(this.#options); // parse the local options looking for overrides to Tempo.#global.config\n // we now have all the info we need to instantiate a new Tempo\n try {\n this.#anchor = this.#options.anchor;\n this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg\n if (['iso8601', 'gregory'].includes(this.#local.config['calendar'])) {\n for (const key of this.#local.config.formats.keys())\n Object.assign(this.#fmt, { [key]: this.format(key) });\n }\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms) // add the plug-in getters for the pre-defined Terms to the instance\n .forEach(({ key, scope, define }) => {\n this.#setTerm(this, key, define, true); // add a getter which returns the key-field only\n this.#setTerm(this, scope, define, false); // add a getter which returns a range-object\n });\n if (isDefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) { // are we mutating with 'set()' ?\n this.#local.parse.result.unshift(...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending)); // prepend collected parse-matches\n __classPrivateFieldSet(Tempo, _classThis, void 0, \"f\", _Tempo_pending); // and reset mutating-flag\n }\n secure(this.#fmt); // prevent mutations\n secure(this.#term); // secure the initial object with getters\n secure(this.#local.config);\n secure(this.#local.parse);\n }\n catch (err) {\n console.error('Tempo Constructor Error:', err);\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.config, `Cannot create Tempo: ${err.message}\\n${err.stack}`);\n return {}; // return empty Object\n }\n }\n // This function has be defined within the Tempo class (and not imported from another module) because it references a private-variable\n /** this will add a getter on the instance #term private field */\n #setTerm(self, name, define, isKeyOnly) {\n if (isDefined(name) && isDefined(define)) {\n Object.defineProperty(self.#term, name, {\n configurable: false,\n enumerable: false,\n get: function () {\n const value = define.call(self, isKeyOnly); // evaluate the term range-lookup\n self.#term = secure(Object.create(self.#term, {\n [name]: {\n value,\n configurable: false,\n writable: false,\n enumerable: true\n }\n }));\n return secure(value);\n }\n });\n }\n }\n // #endregion Constructor\n // #region Instance public accessors~~~~~~~~~~~~~~~~~~~~~~\n /** 4-digit year (e.g., 2024) */ get yy() { return this.toDateTime().year; }\n /** 4-digit ISO week-numbering year */ get wy() { return this.ww === 1 && this.mm === Tempo.MONTH.Dec ? this.yy + 1 : (this.ww >= 52 && this.mm === Tempo.MONTH.Jan ? this.yy - 1 : this.yy); }\n /** Month number: Jan=1, Dec=12 */ get mm() { return this.toDateTime().month; }\n /** ISO week number of the year */ get ww() { return this.toDateTime().weekOfYear; }\n /** Day of the month (1-31) */ get dd() { return this.toDateTime().day; }\n /** Day of the month (alias for `dd`) */ get day() { return this.toDateTime().day; }\n /** Hour of the day (0-23) */ get hh() { return this.toDateTime().hour; }\n /** Minutes of the hour (0-59) */ get mi() { return this.toDateTime().minute; }\n /** Seconds of the minute (0-59) */ get ss() { return this.toDateTime().second; }\n /** Milliseconds of the second (0-999) */ get ms() { return this.toDateTime().millisecond; }\n /** Microseconds of the millisecond (0-999) */ get us() { return this.toDateTime().microsecond; }\n /** Nanoseconds of the microsecond (0-999) */ get ns() { return this.toDateTime().nanosecond; }\n /** Fractional seconds (e.g., 0.123456789) */ get ff() { return +(`0.${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`); }\n /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz() { return this.toDateTime().timeZoneId; }\n /** Unix timestamp (defaults to milliseconds) */ get ts() { return this.epoch[this.#local.config.timeStamp]; }\n /** Short month name (e.g., 'Jan') */ get mmm() { return Tempo.MONTH.keyOf(this.#zdt.month); }\n /** Full month name (e.g., 'January') */ get mon() { return Tempo.MONTHS.keyOf(this.#zdt.month); }\n /** Short weekday name (e.g., 'Mon') */ get www() { return Tempo.WEEKDAY.keyOf(this.#zdt.dayOfWeek); }\n /** Full weekday name (e.g., 'Monday') */ get wkd() { return Tempo.WEEKDAYS.keyOf(this.toDateTime().dayOfWeek); }\n /** ISO weekday number: Mon=1, Sun=7 */ get dow() { return this.toDateTime().dayOfWeek; }\n /** Nanoseconds since Unix epoch (BigInt) */ get nano() { return this.toDateTime().epochNanoseconds; }\n /** current Tempo configuration */\n get config() {\n return getProxy(omit({ ...this.#local.config }, 'scope', 'value', 'anchor'));\n }\n /** Instance-specific parse rules (merged with global) */ get parse() { return this.#local.parse; }\n /** Object containing results from all term plugins */ get term() { return getProxy(this.#term); }\n /** Formatted results for all pre-defined format codes */ get fmt() { return this.#fmt; }\n /** units since epoch */ get epoch() {\n return secure({\n /** seconds since epoch */ ss: Math.trunc(this.toDateTime().epochMilliseconds / 1_000),\n /** milliseconds since epoch */ ms: this.toDateTime().epochMilliseconds,\n /** microseconds since epoch */ us: Number(this.toDateTime().epochNanoseconds / BigInt(1_000)),\n /** nanoseconds since epoch */ ns: this.toDateTime().epochNanoseconds,\n });\n }\n // #endregion Instance public accessors\n // #region Instance private accessors\n /**\n * @Immutable class decorators wrap the class but leave internal lexical bindings pointing to the original, undecorated class.\n * To ensure new instances returned by instance methods are properly frozen,\n * we must instantiate internally from the decorated wrapper (which is bound to `this.constructor`)\n * rather than using `new Tempo(..)`.\n */\n get #Tempo() { return this.constructor; }\n /** time duration until another date-time */ until(optsOrDate, optsOrUntil) { return this.#until(optsOrDate, optsOrUntil); }\n /** time elapsed since another date-time */ since(optsOrDate, optsOrUntil) { return this.#since(optsOrDate, optsOrUntil); }\n /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt) { return this.#format(fmt); }\n /** returns a new `Tempo` with specific duration added. */ add(tempo, options) { return this.#add(tempo, options); }\n /** returns a new `Tempo` with specific offsets. */ set(tempo, options) { return this.#set(tempo, options); }\n /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config); }\n /** returns the underlying Temporal.ZonedDateTime */ toDateTime() { return this.#zdt ?? this.#anchor ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone); }\n /** returns a Temporal.PlainDate representation */ toPlainDate() { return this.toDateTime().toPlainDate(); }\n /** returns a Temporal.PlainTime representation */ toPlainTime() { return this.toDateTime().toPlainTime(); }\n /** returns a Temporal.PlainDateTime representation */ toPlainDateTime() { return this.toDateTime().toPlainDateTime(); }\n /** returns the underlying Temporal.Instant */ toInstant() { return this.toDateTime().toInstant(); }\n /** the date-time as a standard `Date` object. */ toDate() { return new Date(this.toDateTime().round({ smallestUnit: enums.ELEMENT.ms }).epochMilliseconds); }\n /** the ISO8601 string representation of the date-time. */ toString() { return this.toPlainDateTime().toString({ calendarName: 'never' }); }\n /** Custom JSON serialization for `JSON.stringify`. */ toJSON() { return omit({ ...this.#local.config, value: this.toString() }, 'scope', 'store'); }\n /** `true` if the underlying date-time is valid. */ isValid() { return !isEmpty(this); }\n // #endregion Instance public methods\n // #region Instance private methods~~~~~~~~~~~~~~~~~~~~~~~\n /** setup local 'config' and 'parse' rules (prototype-linked to global) */\n #setLocal(options) {\n // setup local config (prototype-linked to global config)\n this.#local.config = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n Object.assign(this.#local.config, { scope: 'local' });\n // setup local parse rules (prototype-linked to global parse)\n this.#local.parse = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse);\n this.#local.parse.result = [];\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, this.#local, options); // set #local config\n }\n /** parse DateTime input */\n #parse(tempo, dateTime) {\n const today = (dateTime ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone))\n .withTimeZone(this.#local.config.timeZone);\n const { type, value } = this.#conform(tempo, today, isDefined(dateTime));\n // evaluate latest timezone / calendar (after #conform which might have updated them)\n const { timeZone, calendar } = this.#local.config;\n const tz = isString(timeZone) ? timeZone : timeZone.id ?? timeZone.timeZoneId;\n const cal = isString(calendar) ? calendar : calendar.id ?? calendar.calendarId;\n if (isEmpty(this.#local.parse.result) && isUndefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) // #conform() didn't find any matches\n this.#local.parse.result = [{ type, value }];\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'parse', `{type: ${type}, value: ${value}}`); // show what we're parsing\n switch (type) {\n case 'Null':\n case 'Void':\n case 'Empty':\n case 'Undefined':\n return today;\n case 'String': // String which didn't conform to a Tempo.pattern\n try {\n const str = value.replace(/Z$/, ''); // requested Z-stripping for adoption\n const zdt = Temporal.ZonedDateTime.from(str.includes('[') ? str : `${str}[${tz}]`);\n if (this.#local)\n this.#local.config.timeZone = zdt.timeZoneId;\n return zdt;\n }\n catch (err) { // else see if Date.parse can parse value\n this.#result({ type: 'String', value }, { match: 'Date.parse' });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, 'Cannot detect DateTime; fallback to Date.parse');\n if (Match.date.test(value)) {\n try {\n return Temporal.PlainDate.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback */ }\n }\n try {\n return Temporal.PlainDateTime.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback to Date.parse */ }\n const date = new Date(value.toString());\n if (isNaN(date.getTime()))\n return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot parse Date: \"${value}\"`);\n return Temporal.ZonedDateTime // adopt instance timezone\n .from(`${date.toISOString().substring(0, 23)}[${tz}]`)\n .withCalendar(cal);\n }\n case 'Temporal.ZonedDateTime': // ZonedDateTime object: convert to instance timezone\n return (value.timeZoneId === tz && value.calendarId === cal)\n ? value\n : value.withTimeZone(tz).withCalendar(cal);\n case 'Temporal.PlainDate':\n case 'Temporal.PlainDateTime':\n return value\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainTime':\n return today.withPlainTime(value);\n case 'Temporal.PlainYearMonth': // assume current day, else end-of-month\n return value\n .toPlainDate({ day: Math.min(today.day, value.daysInMonth) })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainMonthDay': // assume current year\n return value\n .toPlainDate({ year: today.year })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.Instant':\n return value\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Tempo':\n return value\n .toDateTime()\n .withTimeZone(tz)\n .withCalendar(cal); // apply instance timezone to cloned Tempo\n case 'Date':\n return Temporal.Instant.fromEpochMilliseconds(value.getTime())\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Number': // Number which didn't conform to a Tempo.pattern\n const [seconds = BigInt(0), suffix = BigInt(0)] = value.toString().split('.').map(BigInt);\n const nano = BigInt(suffix.toString().substring(0, 9).padEnd(9, '0'));\n return Temporal.Instant.fromEpochNanoseconds(seconds * BigInt(1_000_000_000) + nano)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'BigInt': // BigInt is not conformed against a Tempo.pattern\n return Temporal.Instant.fromEpochNanoseconds(value)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected Tempo parameter type: ${type}, ${String(value)}`);\n return today;\n }\n }\n /** resolve constructor / method arguments */\n #swap(tempo, options = {}) {\n return this.#isOptions(tempo)\n ? [tempo.value, { ...tempo }]\n : [tempo, { ...options }];\n }\n /** check if we've been given a Tempo Options object */\n #isOptions(arg) {\n if (!isObject(arg) || arg.constructor !== Object)\n return false;\n const keys = ownKeys(arg); // if it contains any 'mutation' keys, then it's not (just) an options object\n if (keys.some(key => enums.MUTATION.has(key)))\n return false;\n return keys\n .some(key => enums.OPTION.has(key));\n }\n /** check if we've been given a ZonedDateTimeLike object */\n #isZonedDateTimeLike(tempo) {\n if (!isObject(tempo) || isEmpty(tempo))\n return false;\n // if it contains any 'options' keys, it's not a ZonedDateTime\n const keys = ownKeys(tempo);\n if (keys.some(key => enums.OPTION.has(key) && key !== 'value'))\n return false;\n // we include {value} to allow for Tempo instances\n return keys\n .filter(isString)\n .every((key) => enums.ZONED_DATE_TIME.has(key));\n }\n #result(...rest) {\n const match = Object.assign({}, ...rest); // collect all object arguments\n if (!isEmpty(match.groups)) {\n if (isDefined(this.#anchor) && !match.isAnchored)\n match.isAnchored = true;\n (__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending) ?? this.#local.parse.result).push(match);\n }\n }\n /** evaluate 'string | number' input against known patterns */\n #conform(tempo, dateTime, isAnchored = false) {\n const arg = asType(tempo);\n const { type, value } = arg;\n if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property)\n const { timeZone, calendar, value, ...options } = tempo;\n let zdt = !isEmpty(options)\n ? dateTime.with({ ...options })\n : dateTime;\n if (timeZone)\n zdt = zdt.withTimeZone(timeZone); // optionally set timeZone\n if (calendar)\n zdt = zdt.withCalendar(calendar); // optionally set calendar\n this.#result({ type: 'Temporal.ZonedDateTimeLike', value: zdt, match: 'Temporal.ZonedDateTimeLike' });\n return Object.assign(arg, {\n type: 'Temporal.ZonedDateTime', // override {arg.type}\n value: zdt,\n });\n }\n if (type !== 'String' && type !== 'Number') {\n this.#result(arg, { match: type });\n return arg;\n }\n if (isFunction(value)) {\n const res = value.call(this);\n return this.#conform(res, dateTime, isAnchored);\n }\n const trim = trimAll(value);\n if (type === 'String') { // if original value is String\n if (isEmpty(trim)) { // don't conform empty string\n this.#result(arg, { match: 'Empty' });\n return Object.assign(arg, { type: 'Empty' });\n }\n if (isIntegerLike(trim)) { // if string representation of BigInt literal\n this.#result(arg, { match: 'BigInt' });\n return Object.assign(arg, { type: 'BigInt', value: asInteger(trim) });\n }\n }\n else { // else it is a Number\n if (trim.length <= 7) { // cannot reliably interpret small numbers: might be {ss} or {yymmdd} or {dmmyyyy}\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, 'Cannot safely interpret number with less than 8-digits: use string instead');\n return arg;\n }\n }\n // const isSimpleIsoOrNumeric = typeof value === 'string' && (Match.date.test(value) || /^\\d+$/.test(value));\n const map = this.#local.parse.pattern;\n for (const [sym, pat] of map) {\n const groups = this.#parseMatch(pat, trim); // determine pattern-match groups\n if (isEmpty(groups))\n continue; // no match, so skip this iteration\n this.#result(arg, { match: sym.description, groups: cleanify(groups) }); // stash the {key} of the pattern that was matched\n dateTime = this.#parseZone(groups, dateTime); // resolve timezone early so events can use it\n dateTime = this.#parseGroups(groups, dateTime); // mutate the {groups} object (resolves events/periods)\n dateTime = this.#parseWeekday(groups, dateTime); // if {weekDay} pattern, calculate a calendar value\n dateTime = this.#parseDate(groups, dateTime); // if {calendar}|{event} pattern, translate to date value\n dateTime = this.#parseTime(groups, dateTime); // if {clock}|{period} pattern, translate to a time value\n /**\n * finished analyzing a matched pattern.\n * rebuild {arg.value} into a ZonedDateTime\n */\n // if no time-components were matched, strip time to midnight baseline\n if (!isAnchored && !['hh', 'mi', 'ss', 'ff', 'mer', 'per'].some(key => isDefined(groups[key])))\n dateTime = dateTime.withPlainTime('00:00:00');\n Object.assign(arg, { type: 'Temporal.ZonedDateTime', value: dateTime });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'groups', groups); // show the resolved date-time elements\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'pattern', sym.description); // show the pattern that was matched\n break; // stop checking patterns\n }\n return arg;\n }\n /** apply a regex-match against a value, and clean the result */\n #parseMatch(pat, value) {\n const groups = value.toString().match(pat)?.groups || {};\n ownEntries(groups) // remove undefined, NaN, null and empty values\n .forEach(([key, val]) => isEmpty(val) && delete groups[key]);\n return groups;\n }\n /** resolve {event} | {period} to their date | time values (mutates groups) */\n #parseGroups(groups, dateTime) {\n this.#anchor = dateTime; // temporarily anchor the instance so events resolve relative to current state\n try {\n for (const key of ownKeys(groups)) {\n const isEvent = Match.event.test(key);\n const isPeriod = Match.period.test(key);\n if (!isEvent && !isPeriod)\n continue;\n const idx = +key.substring(4);\n const src = key.startsWith('g') ? (isEvent ? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.event : __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.period) : (isEvent ? this.#local.parse.event : this.#local.parse.period);\n const entry = ownEntries(src, true)[idx];\n if (!entry)\n continue;\n const definition = entry[1];\n const res = isFunction(definition) ? definition.call(this).toString() : definition;\n const resGroups = isEvent ? this.#parseEvent(res) : this.#parsePeriod(res);\n Object.assign(groups, resGroups);\n delete groups[key];\n }\n }\n finally {\n this.#anchor = void 0; // reset anchor\n }\n // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date)\n if (isDefined(groups[\"mm\"]) && !isNumeric(groups[\"mm\"])) {\n const mm = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, groups[\"mm\"]); // conform month-name\n groups[\"mm\"] = Tempo.MONTH.keys().findIndex((el) => el === mm).toString().padStart(2, '0');\n }\n // Apply mutated groups to dateTime\n if (isDefined(groups.yy) || isDefined(groups.mm) || isDefined(groups.dd))\n dateTime = this.#parseDate(groups, dateTime);\n if (isDefined(groups.hh) || isDefined(groups.mi) || isDefined(groups.ss) || isDefined(groups.ff) || isDefined(groups.mer))\n dateTime = this.#parseTime(groups, dateTime);\n return dateTime;\n }\n /**\n * We expect similar offset-logic to apply to 'modifiers' when parsing a string DateTime.\n * returns {adjust} to make, based on {modifier}, {offset}, and {period}\n * -\t\t\tprevious period\n * +\t\t\tnext period\n * -3\t\t\tthree periods ago\n * <\t\t\tprior to base-date (asIs)\n * <=\t\t\tprior to base-date (plus one)\n */\n #parseModifier({ mod, adjust, offset, period }) {\n adjust = Math.abs(adjust);\n switch (mod) {\n case void 0: // no adjustment\n case '=':\n case 'this': // current period\n return 0;\n case '+': // next period\n case 'next':\n return adjust;\n case '-': // previous period\n case 'prev':\n case 'last':\n return -adjust;\n case '<': // period before base-date\n case 'ago':\n return (period <= offset)\n ? -adjust\n : -(adjust - 1);\n case '<=': // period before or including base-date\n return (period < offset)\n ? -adjust\n : -(adjust - 1);\n case '>': // period after base-date\n case 'hence':\n return (period > offset)\n ? adjust\n : (adjust - 1);\n case '>=': // period after or including base-date\n case '+=':\n return (period >= offset)\n ? adjust\n : (adjust - 1);\n default: // unexpected modifier\n return 0;\n }\n }\n /**\n * if named-group 'wkd' detected (with optional 'mod', 'nbr', 'sfx' or time-units), then calc relative weekday offset\n * | Example | Result | Note |\n * | :--- | :---- | :---- |\n * | `Wed` | Wed this week | might be earlier or later or equal to current day |\n * | `-Wed` | Wed last week | same as new Tempo('Wed').add({ weeks: -1 }) |\n * | `+Wed` | Wed next week | same as new Tempo('Wed').add({ weeks: 1 }) |\n * | `-3Wed` | Wed three weeks ago | same as new Tempo('Wed').add({ weeks: -3 }) |\n * | `', hh: '10', mer: 'pm'}\n * we early-exit if we find anything other than time-units\n */\n const time = ['hh', 'mi', 'ss', 'ms', 'us', 'ns', 'ff', 'mer'];\n if (!ownKeys(rest)\n .every(key => time.includes(key))) // non 'time-unit' keys detected\n return dateTime; // this is not a true {weekDay} pattern, so early-exit\n if (!isEmpty(mod) && !isEmpty(sfx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${sfx}'`);\n return dateTime; // cannot provide both 'modifier' and 'suffix'\n }\n const weekday = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, wkd); // conform weekday-name\n const adjust = +nbr; // how many weeks to adjust\n const offset = Tempo.WEEKDAY.keys() // how far weekday is from today\n .findIndex((el) => el === weekday);\n const days = offset - dateTime.dayOfWeek // number of days to offset from dateTime\n + (this.#parseModifier({ mod: mod ?? sfx, adjust, offset, period: dateTime.dayOfWeek }) * dateTime.daysInWeek);\n delete groups[\"wkd\"];\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"sfx\"];\n return dateTime\n .add({ days }); // set new {day}\n }\n /**\n * match input against date patterns\n * @returns adjusted ZonedDateTime with resolved time-components\n */\n #parseDate(groups, dateTime) {\n const { mod, nbr = '1', afx, unt, yy, mm, dd } = groups;\n if (isEmpty(yy) && isEmpty(mm) && isEmpty(dd) && isUndefined(unt))\n return dateTime; // return default\n if (!isEmpty(mod) && !isEmpty(afx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${afx}'`);\n return dateTime;\n }\n let { year, month, day } = this.#num({\n year: yy ?? dateTime.year, // supplied year, else current year\n month: mm ?? dateTime.month, // supplied month, else current month\n day: dd ?? dateTime.day, // supplied day, else current day\n });\n // handle {unt} relative offset (e.g. '2 days ago')\n if (unt) {\n const adjust = +nbr;\n const direction = (mod === '<' || mod === '-' || afx === 'ago') ? -1 : 1;\n const plural = singular(unt) + 's';\n dateTime = dateTime.add({ [plural]: adjust * direction });\n delete groups[\"unt\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n delete groups[\"mod\"];\n return dateTime;\n }\n // convert 2-digit year to 4-digits using 'pivot-year' (relative to current century)\n if (year.toString().match(Match.twoDigit)) { // if {year} match just-two digits\n const pivot = dateTime\n .subtract({ years: this.#local.parse[\"pivot\"] }) // pivot cutoff to determine century\n .year % 100; // remainder \n const century = Math.trunc(dateTime.year / 100); // current century\n year += (century - Number(year >= pivot)) * 100; // now a four-digit year\n }\n // adjust the {year} if a Modifier is present\n const adjust = +nbr; // how many years to adjust\n const offset = Number(pad(month) + '.' + pad(day)); // the event month.day\n const period = Number(pad(dateTime.month) + '.' + pad(dateTime.day + 1));\n year += this.#parseModifier({ mod: mod ?? afx, adjust, offset, period });\n Object.assign(groups, { yy: year, mm: month, dd: day });\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n // all date-components are now set; check for overflow in case past end-of-month\n return Temporal.PlainDate.from({ year, month, day }, { overflow: 'constrain' })\n .toZonedDateTime(dateTime.timeZoneId) // adjust to constrained date\n .withPlainTime(dateTime.toPlainTime()); // restore the time\n }\n /** match input against 'tm' pattern (returns adjusted ZonedDateTime) */\n #parseTime(groups = {}, dateTime) {\n if (isUndefined(groups[\"hh\"])) // must contain 'time' with at least {hh}\n return dateTime;\n let { hh = 0, mi = 0, ss = 0, ms = 0, us = 0, ns = 0 } = this.#num(groups);\n if (hh >= 24) {\n dateTime = dateTime.add({ days: Math.trunc(hh / 24) }); // move the date forward number of days to offset\t\t\t\t\t\t\t\t\n hh %= 24; // midnight is '00:00' on the next-day\n }\n if (isDefined(groups[\"ff\"])) { // {ff} is fractional seconds and overrides {ms|us|ns}\n const ff = groups[\"ff\"].substring(0, 9).padEnd(9, '0');\n ms = +ff.substring(0, 3);\n us = +ff.substring(3, 6);\n ns = +ff.substring(6, 9);\n }\n if (groups[\"mer\"]?.toLowerCase() === 'pm' && hh < 12 && (hh + mi + ss + ms + us + ns) > 0)\n hh += 12; // anything after midnight and before midday\n if (groups[\"mer\"]?.toLowerCase() === 'am' && hh >= 12)\n hh -= 12; // anything after midday\n return dateTime // return the computed time-values\n .withPlainTime({ hour: hh, minute: mi, second: ss, millisecond: ms, microsecond: us, nanosecond: ns });\n }\n /**\n * apply a timezone or calendar bracket to the current ZonedDateTime\n * normalization is applied to ensure 'Z' is treated as 'UTC'\n */\n #parseZone(groups, dateTime) {\n const tzd = groups[\"tzd\"]?.replace(Match.zed, 'UTC'); // normalize timezone/offset\n const brk = groups[\"brk\"]?.replace(Match.zed, 'UTC'); // handle bracketed timezone\n const zone = brk || tzd;\n if (zone && zone !== dateTime.timeZoneId && !zone.startsWith('u-ca=')) {\n if (this.#local)\n this.#local.config.timeZone = zone; // update local config if exists\n dateTime = dateTime.toPlainDateTime().toZonedDateTime(zone); // adopt timezone override (stable)\n }\n const cal = groups[\"cal\"];\n if (cal && cal !== dateTime.calendarId) {\n const calendar = cal.startsWith('u-ca=') ? cal.substring(5) : cal;\n this.#local.config.calendar = calendar;\n dateTime = dateTime.withCalendar(calendar);\n }\n delete groups[\"brk\"];\n delete groups[\"cal\"];\n delete groups[\"tzd\"];\n return dateTime;\n }\n /** match an {event} string against a date pattern */\n #parseEvent(evt) {\n const groups = {};\n const pats = this.#local.parse.isMonthDay // first find out if we have a US-format timeZone\n ? ['mdy', 'dmy', 'ymd'] // if so, try {mdy} before {dmy}\n : ['dmy', 'mdy', 'ymd']; // else try {dmy} before {mdy}\n for (const pat of pats) {\n const reg = this.#getPattern(pat);\n if (isDefined(reg)) {\n const match = this.#parseMatch(reg, evt);\n if (!isEmpty(match)) {\n this.#result({ type: 'Event', value: evt, match: pat, groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n if (!isEmpty(groups))\n break; // return on the first matched pattern\n }\n return groups; // overlay the match date-components\n }\n /** match a {period} string against the time pattern */\n #parsePeriod(per) {\n const groups = {};\n const tm = this.#getPattern('tm'); // get the RegExp for the time-pattern\n if (isDefined(tm)) {\n const match = this.#parseMatch(tm, per);\n if (!isEmpty(match)) {\n this.#result({ type: 'Period', value: per, match: 'tm', groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n return groups;\n }\n /** lookup the RegExp for a given pattern name */\n #getPattern(pat) {\n const reg = this.#local.parse.pattern.get(Tempo.getSymbol(pat));\n if (isUndefined(reg))\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot find pattern: \"${pat}\"`);\n return reg;\n }\n /** return a new object, with only numeric values */\n #num = (groups) => {\n return ownEntries(groups)\n .reduce((acc, [key, val]) => {\n if (isNumeric(val))\n acc[key] = asNumber(val);\n return acc;\n }, {});\n };\n /** mutate the date-time by adding a duration */\n #add = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n const mutate = 'add';\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [unit, offset]) => {\n if (unit === 'timeZone' || unit === 'calendar')\n return zdt;\n const single = singular(unit);\n const plural = single + 's';\n switch (`${mutate}.${single}`) {\n case 'add.year':\n case 'add.month':\n case 'add.week':\n case 'add.day':\n case 'add.hour':\n case 'add.minute':\n case 'add.second':\n case 'add.millisecond':\n case 'add.microsecond':\n case 'add.nanosecond':\n return zdt\n .add({ [plural]: offset });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`);\n return zdt;\n }\n }, zdt);\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n /** mutate the date-time by setting specific offsets */\n #set = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n if (args.timeZone)\n overrides.timeZone = args.timeZone;\n if (args.calendar)\n overrides.calendar = args.calendar;\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [key, adjust]) => {\n if (key === 'timeZone' || key === 'calendar')\n return zdt;\n const { mutate, offset, single } = ((key) => {\n switch (key) {\n case 'start':\n case 'mid':\n case 'end':\n return { mutate: key, offset: 0, single: singular(adjust?.toString() ?? '') };\n default:\n return { mutate: 'set', offset: adjust, single: singular(key) };\n }\n })(key); // IIFE to analyze arguments\n switch (`${mutate}.${single}`) {\n case 'set.timeZone':\n return zdt.withTimeZone(offset);\n case 'set.calendar':\n return zdt.withCalendar(offset);\n case 'set.period':\n case 'set.time':\n case 'set.date':\n case 'set.event':\n case 'set.dow': // set day-of-week by number\n case 'set.wkd': // set day-of-week by name\n return this.#parse(offset, zdt);\n case 'set.year':\n case 'set.month':\n // case 'set.week':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.day':\n case 'set.hour':\n case 'set.minute':\n case 'set.second':\n case 'set.millisecond':\n case 'set.microsecond':\n case 'set.nanosecond':\n return zdt\n .with({ [single]: offset });\n case 'set.yy':\n case 'set.mm':\n // case 'set.ww':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.dd':\n case 'set.hh':\n case 'set.mi':\n case 'set.ss':\n case 'set.ms':\n case 'set.us':\n case 'set.ns':\n const value = Tempo.ELEMENT[single];\n return zdt\n .with({ [value]: offset });\n case 'start.year':\n return zdt\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay();\n case 'start.term': // TODO\n return zdt;\n case 'start.month':\n return zdt\n .with({ day: 1 })\n .startOfDay();\n case 'start.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) })\n .startOfDay();\n case 'start.day':\n return zdt\n .startOfDay();\n case 'start.hour':\n case 'start.minute':\n case 'start.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'trunc' });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'mid.year':\n return zdt\n .with({ month: Tempo.MONTH.Jul, day: 1 })\n .startOfDay();\n case 'mid.term': // TODO: relevant?\n return zdt;\n case 'mid.month':\n return zdt\n .with({ day: Math.trunc(zdt.daysInMonth / 2) })\n .startOfDay();\n case 'mid.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) })\n .startOfDay();\n case 'mid.day':\n return zdt\n .round({ smallestUnit: 'day', roundingMode: 'trunc' })\n .add({ hours: 12 });\n case 'mid.hour':\n return zdt\n .round({ smallestUnit: 'hour', roundingMode: 'trunc' })\n .add({ minutes: 30 });\n case 'mid.minute':\n return zdt\n .round({ smallestUnit: 'minute', roundingMode: 'trunc' })\n .add({ seconds: 30 });\n case 'mid.second':\n return zdt\n .round({ smallestUnit: 'second', roundingMode: 'trunc' })\n .add({ milliseconds: 500 });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'end.year':\n return zdt\n .add({ years: 1 })\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.term': // TODO\n return zdt\n .subtract({ nanoseconds: 1 });\n case 'end.month':\n return zdt\n .add({ months: 1 })\n .with({ day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.week':\n return zdt\n .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.day':\n case 'end.hour':\n case 'end.minute':\n case 'end.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'ceil' })\n .subtract({ nanoseconds: 1 });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`);\n return zdt;\n }\n }, zdt); // start reduce with the shifted zonedDateTime\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n #format = (fmt) => {\n if (isNull(this.#tempo))\n return undefined; // don't format dates\n const obj = this.#local.config.formats;\n let template = (isString(fmt) && obj.has(fmt))\n ? obj[fmt]\n : String(fmt);\n // auto-meridiem: if {HH} is present and {mer} is absent, append it after the last time component\n if (template.includes('{HH}') && !template.includes('{mer}') && !template.includes('{MER}')) {\n const index = Math.max(template.lastIndexOf('{HH}'), template.lastIndexOf('{mi}'), template.lastIndexOf('{ss}'));\n if (index !== -1) {\n const end = template.indexOf('}', index) + 1;\n template = template.slice(0, end) + '{mer}' + template.slice(end);\n }\n }\n const result = template.replace(Match.braces, (_match, token) => {\n switch (token) {\n case 'wy': return pad(this.wy, 4);\n case 'yyww': return pad(this.wy, 4) + pad(this.ww);\n case 'yyyy': return pad(this.yy, 4);\n case 'yy': return pad(this.yy % 100);\n case 'mon': return this.mon;\n case 'mmm': return this.mmm;\n case 'mm': return pad(this.mm);\n case 'dd': return pad(this.dd);\n case 'day': return this.day.toString();\n case 'dow': return this.dow.toString();\n case 'wkd': return this.wkd;\n case 'www': return this.www;\n case 'ww': return pad(this.ww);\n case 'hh': return pad(this.hh);\n case 'HH': return pad(this.hh > 12 ? this.hh % 12 : this.hh || 12);\n case 'mer': return this.hh >= 12 ? 'pm' : 'am';\n case 'MER': return this.hh >= 12 ? 'PM' : 'AM';\n case 'mi': return pad(this.mi);\n case 'ss': return pad(this.ss);\n case 'ms': return pad(this.ms, 3);\n case 'us': return pad(this.us, 3);\n case 'ns': return pad(this.ns, 3);\n case 'ff': return `${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`;\n case 'hhmiss': return `${pad(this.hh)}${pad(this.mi)}${pad(this.ss)}`;\n case 'ts': return this.ts.toString();\n case 'nano': return this.nano.toString();\n case 'tz': return this.tz;\n default: {\n return token.startsWith('term.')\n ? stringify(this.term[token.slice(5)])\n : `{${token}}`; // unknown format-code, return as-is\n }\n }\n });\n const isExplicitlyNumeric = ['{yyyy}{ww}', '{yyyy}{mm}', '{yyyy}{mm}{dd}', '{yyww}', '{wy}{ww}', '{wy}'].includes(template);\n return (isExplicitlyNumeric ? ifNumeric(result) : result);\n };\n #until(arg, until = {}, since = false) {\n let value, opts = {}, unit;\n switch (true) {\n case isString(arg) && Tempo.ELEMENT.includes(singular(arg)):\n unit = arg; // e.g. tempo.until('hours')\n ({ value, ...opts } = until);\n break;\n case isString(arg): // assume 'arg' is a dateTime string\n value = arg; // e.g. tempo.until('20-May-1957', {unit: 'years'})\n if (isObject(until))\n ({ unit, ...opts } = until);\n else\n unit = until; // assume the 'until' arg is a 'unit' string\n break;\n case isObject(arg) && isString(until): // assume 'until' is a Unit\n unit = until; // e.g. tempo.until({value:'20-May-1957}, 'years'})\n ({ value, ...opts } = arg);\n break;\n case isObject(arg) && isObject(until): // assume combination of Tempo.Options and Tempo.Until\n ({ value, unit, ...opts } = Object.assign({}, arg, until));\n break;\n case isString(until):\n unit = until;\n value = arg;\n break;\n case isObject(until):\n unit = until.unit;\n value = arg;\n break;\n default:\n value = arg; // assume 'arg' is a DateTime\n }\n const offset = new this.#Tempo(value, opts); // create the offset Tempo\n const diffZone = this.#zdt.timeZoneId !== offset.#zdt.timeZoneId;\n // Temporal restricts cross-timezone math to absolute units ('hours') to avoid DST ambiguity\n const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') });\n if (isDefined(unit))\n unit = `${singular(unit)}s`; // coerce to plural\n return (isUndefined(unit) || since) // if no 'unit' provided, or if called via #since()\n ? getAccessors(duration) // return an Object with all the duration accessors\n .reduce((acc, dur) => Object.assign(acc, { [dur]: duration[dur] }), ifDefined({ iso: duration.toString(), unit }))\n : duration.total({ relativeTo: this.#zdt, unit }); // sum-up the duration components\n }\n /** format the elapsed time between two Tempos (to nanosecond) */\n #since(arg, until = {}) {\n const dur = this.#until(arg, until, true); // get a Tempo.Duration object\n const date = [dur.years, dur.months, dur.days];\n const time = [dur.hours, dur.minutes, dur.seconds];\n const fraction = [dur.milliseconds, dur.microseconds, dur.nanoseconds]\n .map(Math.abs)\n .map(nbr => nbr.toString().padStart(3, '0'))\n .join('');\n const rtf = new Intl.RelativeTimeFormat(this.#local.config['locale'], { style: 'narrow' });\n switch (dur.unit) {\n case 'years':\n return rtf.format(date[0], 'years');\n case 'months':\n return rtf.format(date[1], 'months');\n case 'weeks':\n return rtf.format(date[1], 'weeks');\n case 'days':\n return rtf.format(date[2], 'days');\n case 'hours':\n return rtf.format(time[0], 'hours');\n case 'minutes':\n return rtf.format(time[1], 'minutes');\n case 'seconds':\n return rtf.format(time[2], 'seconds');\n case 'milliseconds':\n case 'microseconds':\n case 'nanoseconds':\n return `${fraction}`;\n default:\n return dur.iso;\n }\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Tempo = _classThis;\n})();\nexport { Tempo };\n// #endregion Namespace\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nTempo.init(); // initialize default global configuration\n// shortcut functions to common Tempo properties / methods\n/** check valid Tempo */ export const isTempo = (tempo) => isType(tempo, 'Tempo');\n/** current timestamp (ts) */ export const getStamp = ((tempo, options) => new Tempo(tempo, options).ts);\n/** create new Tempo */ export const getTempo = ((tempo, options) => new Tempo(tempo, options));\n/** format a Tempo */ export const fmtTempo = ((fmt, tempo, options) => new Tempo(tempo, options).format(fmt));\n//# sourceMappingURL=tempo.class.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport { Logify } from '#core/shared/logify.class.js';\nimport { asArray } from '#core/shared/coercion.library.js';\nimport { sprintf } from '#core/shared/string.library.js';\nimport { ifDefined } from '#core/shared/object.library.js';\nimport { secure } from '#core/shared/utility.library.js';\nimport { cleanify } from '#core/shared/serialize.library.js';\nimport { Immutable } from '#core/shared/class.library.js';\nimport { isEmpty, isObject } from '#core/shared/type.library.js';\n/**\n * Wrap a Promise's resolve/reject/finally methods for later fulfilment.\n * with useful methods for tracking the state of the Promise, chaining fulfilment, etc.\n ```\n new Pledge({tag: string, onResolve?: () => void, onReject?: () => void, onSettle?: () => void})\n new Pledge(tag?: string)\n ```\n */\nlet Pledge = (() => {\n var _Pledge_static;\n let _classDecorators = [Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Pledge = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Pledge\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Pledge = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n #pledge;\n #status = {};\n #dbg;\n static {\n _Pledge_static = { value: {} };\n }\n static STATE = secure({\n Pending: Symbol('pending'),\n Resolved: Symbol('resolved'),\n Rejected: Symbol('rejected')\n });\n /** initialize future Pledge instances */\n static init(arg) {\n if (isObject(arg)) {\n if (isEmpty(arg))\n __classPrivateFieldSet(Pledge, _classThis, {}, \"f\", _Pledge_static); // reset static values\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }), ifDefined({ onResolve: arg.onResolve, onReject: arg.onReject, onSettle: arg.onSettle, }));\n }\n else {\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg, }));\n }\n if (__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug)\n console.log('Pledge: ', __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static)); // debug\n return Pledge.status;\n }\n /** reset static defaults */\n static [Symbol.dispose]() { Pledge.init({}); }\n static get status() {\n return __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static);\n }\n /** use catch:boolean to determine whether to throw or return */\n #catch(...msg) {\n if (this.status.catch) {\n this.#dbg.warn(...msg); // catch, but warn {error}\n return;\n }\n this.#dbg.error(...msg); // assume {error}\n throw new Error(sprintf('pledge: ', ...msg));\n }\n constructor(arg) {\n this.#pledge = Promise.withResolvers();\n this.#status = { state: Pledge.STATE.Pending, ...__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static) };\n if (isObject(arg)) {\n this.#dbg = new Logify({ debug: arg.debug, catch: arg.catch });\n Object.assign(this.#status, ifDefined({ tag: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, debug: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug, catch: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).catch }), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }));\n const onResolve = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onResolve).concat(asArray(arg.onResolve));\n const onReject = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onReject).concat(asArray(arg.onReject));\n const onSettle = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onSettle).concat(asArray(arg.onSettle));\n if (onResolve.length)\n this.#pledge.promise.then(val => onResolve.forEach(cb => cb(val)));\n if (onReject.length)\n this.#pledge.promise.catch(err => onReject.forEach(cb => cb(err)));\n if (onSettle.length)\n this.#pledge.promise.finally(() => onSettle.forEach(cb => cb()));\n if (this.#status.catch)\n this.#pledge.promise.catch(err => this.#catch(this.#status, err));\n }\n else {\n this.#dbg = new Logify();\n Object.assign(this.#status, ifDefined({ tag: arg ?? __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, }));\n }\n this.#pledge.promise.catch(() => { }); // global catch-all to prevent unhandled rejections\n Object.freeze(this); // make this instance immutable\n }\n get [Symbol.toStringTag]() {\n return 'Pledge';\n }\n [Symbol.dispose]() {\n if (this.isPending)\n this.reject(new Error(`Pledge disposed`)); // discard pending Pledge (to notify wait-ers)\n }\n get status() {\n return cleanify(this.#status);\n }\n get promise() {\n return this.#pledge.promise;\n }\n get state() {\n return this.#status.state.description;\n }\n get isPending() {\n return this.#status.state === Pledge.STATE.Pending;\n }\n get isResolved() {\n return this.#status.state === Pledge.STATE.Resolved;\n }\n get isRejected() {\n return this.#status.state === Pledge.STATE.Rejected;\n }\n get isSettled() {\n return this.#status.state !== Pledge.STATE.Pending;\n }\n toString() {\n return JSON.stringify(this.status);\n }\n resolve(value) {\n if (this.isPending) {\n this.#status.settled = value;\n this.#status.state = Pledge.STATE.Resolved;\n this.#pledge.resolve(value); // resolve, then trigger any Pledge.onResolve, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n reject(error) {\n if (this.isPending) {\n this.#status.error = error;\n this.#status.state = Pledge.STATE.Rejected;\n this.#pledge.reject(error); // reject, then trigger any Pledge.onReject, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n then(fn) {\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Pledge = _classThis;\n})();\nexport { Pledge };\n//# sourceMappingURL=pledge.class.js.map"],"names":["isTempo","ranges","key","scope","description","define","qtr.key","qtr.scope","qtr.description","qtr.define","szn.key","szn.scope","szn.description","szn.define","zdc.key","zdc.scope","zdc.description","zdc.define","per.key","per.scope","per.description","per.define","enums.WEEKDAY","enums.WEEKDAYS","enums.MONTH","enums.MONTHS","enums.DURATION","enums.DURATIONS","enums.SEASON","enums.COMPASS","enums.ELEMENT","enums.LIMIT","enums.PARSE","enums.FORMAT","enums.MUTATION","enums.OPTION","enums.ZONED_DATE_TIME"],"mappings":"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","x_google_ignoreList":[1]} \ No newline at end of file diff --git a/packages/tempo/dist/tempo.class.d.ts b/packages/tempo/dist/tempo.class.d.ts new file mode 100644 index 00000000..6826914e --- /dev/null +++ b/packages/tempo/dist/tempo.class.d.ts @@ -0,0 +1,641 @@ +import '#core/temporal.polyfill.js'; +import type { IntRange, LooseUnion, NonOptional, Property, Plural, Type } from '#core/shared/type.library.js'; +import * as enums from '#core/tempo.config/tempo.enum.js'; +import { Token, Snippet, Layout, Event, Period } from '#core/tempo.config/tempo.default.js'; +import '#core/shared/prototype.library.js'; +declare module '#core/shared/type.library.js' { + interface TypeValueMap { + Tempo: { + type: 'Tempo'; + value: Tempo; + }; + } +} +/** key to use for storage / globalThis Symbol */ export declare const $Tempo: unique symbol; +/** + * # Tempo + * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. + * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. + */ +export declare class Tempo { + #private; + /** Weekday names (short-form) */ static get WEEKDAY(): import("#core/shared/enumerate.library.js").Enum.wrap>; + /** Weekday names (long-form) */ static get WEEKDAYS(): import("#core/shared/enumerate.library.js").Enum.wrap>; + /** Month names (short-form) */ static get MONTH(): import("#core/shared/enumerate.library.js").Enum.wrap>; + /** Month names (long-form) */ static get MONTHS(): import("#core/shared/enumerate.library.js").Enum.wrap>; + /** Time durations as seconds (singular) */ static get DURATION(): import("#core/shared/enumerate.library.js").Enum.wrap<{ + readonly year: 31536000; + readonly month: 2628000; + readonly week: 604800; + readonly day: 86400; + readonly hour: 3600; + readonly minute: 60; + readonly second: 1; + readonly millisecond: 0.001; + readonly microsecond: 0.000001; + readonly nanosecond: 1e-9; + }>; + /** Time durations as milliseconds (plural) */ static get DURATIONS(): import("#core/shared/enumerate.library.js").Enum.wrap<{ + readonly years: number; + readonly months: number; + readonly weeks: number; + readonly days: number; + readonly hours: number; + readonly minutes: number; + readonly seconds: number; + readonly milliseconds: number; + readonly microseconds: number; + readonly nanoseconds: number; + }>; + /** Quarterly Seasons */ static get SEASON(): import("#core/shared/enumerate.library.js").Enum.wrap<{ + readonly Summer: "summer"; + readonly Autumn: "autumn"; + readonly Winter: "winter"; + readonly Spring: "spring"; + }>; + /** Compass cardinal points */ static get COMPASS(): import("#core/shared/enumerate.library.js").Enum.wrap<{ + readonly North: "north"; + readonly East: "east"; + readonly South: "south"; + readonly West: "west"; + }>; + /** Tempo to Temporal DateTime Units map */ static get ELEMENT(): import("#core/shared/enumerate.library.js").Enum.wrap<{ + readonly yy: "year"; + readonly mm: "month"; + readonly ww: "week"; + readonly dd: "day"; + readonly hh: "hour"; + readonly mi: "minute"; + readonly ss: "second"; + readonly ms: "millisecond"; + readonly us: "microsecond"; + readonly ns: "nanosecond"; + }>; + /** Pre-configured format {name -> string} pairs */ static get FORMAT(): enums.FormatEnum; + /** some useful Dates */ static get LIMIT(): import("#core/shared/type.library.js").SecureObject<{ + readonly maxTempo: bigint; + readonly minTempo: bigint; + }>; + /** + * Bootstrap the library with a Custom Global Discovery object. + * + * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern + * and automatically calls `Tempo.init()` to apply the discovered configuration. + * + * @param config - The Global Discovery object to register. + * @returns The resolved global configuration. + */ + static discover(config: Tempo.Discovery): { + [key: string]: any; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + anchor: Temporal.ZonedDateTime; + timeZone: Temporal.TimeZoneLike; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + }; + /** + * Initializes the global default configuration for all subsequent `Tempo` instances. + * + * Settings are inherited in this priority: + * 1. Reasonable library defaults (defined in tempo.config.js) + * 2. Persistent storage (e.g. localStorage), if available. + * 3. `options` provided to this method. + * + * @param options - Configuration overrides to apply globally. + * @returns The resolved global configuration. + */ + static init(options?: Tempo.Options): { + [key: string]: any; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + anchor: Temporal.ZonedDateTime; + timeZone: Temporal.TimeZoneLike; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + }; + /** release global config and reset library to defaults */ + static [Symbol.dispose](): void; + /** + * Extends the Tempo class with new functionality. + * Plugins can add static or instance methods to the library. + */ + static extend(plugin: Tempo.Plugin, options?: any): typeof Tempo; + /** Reads options from persistent storage (e.g., localStorage). */ + static readStore(key?: string): Tempo.Options; + /** Writes configuration into persistent storage. */ + static writeStore(config?: Tempo.Options, key?: string): void; + /** lookup or registers a new `Symbol` for a given key. */ + static getSymbol(key?: string | symbol): symbol; + /** translates {layout} into an anchored, case-insensitive RegExp. */ + static regexp(layout: string | RegExp, snippet?: Snippet): RegExp; + /** Compares two `Tempo` instances or date-time values. */ + static compare(tempo1?: Tempo.DateTime | Tempo.Options, tempo2?: Tempo.DateTime | Tempo.Options): number; + /** global Tempo configuration */ + static get config(): { + [key: string]: any; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + anchor: Temporal.ZonedDateTime; + timeZone: Temporal.TimeZoneLike; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + }; + /** global discovery configuration */ + static get discovery(): any; + /** + * Returns a snapshot of the configuration layers used by Tempo. + * Useful for debugging how the final configuration is built. + */ + static get options(): { + default: import("#core/shared/type.library.js").SecureObject<{ + readonly scope: "default"; + readonly timeZone: import("#core/shared/type.library.js").Extend<{ + readonly utc: "UTC"; + readonly gmt: "Europe/London"; + readonly est: "America/New_York"; + readonly cst: "America/Chicago"; + readonly mst: "America/Denver"; + readonly pst: "America/Los_Angeles"; + readonly aest: "Australia/Sydney"; + readonly acst: "Australia/Adelaide"; + readonly awst: "Australia/Perth"; + readonly nzt: "Pacific/Auckland"; + readonly cet: "Europe/Paris"; + readonly eet: "Europe/Helsinki"; + readonly ist: "Asia/Kolkata"; + readonly npt: "Asia/Kathmandu"; + readonly jst: "Asia/Tokyo"; + }, string, string>; + readonly store?: string | undefined; + readonly discovery?: string | undefined; + readonly debug?: boolean | undefined; + readonly catch?: boolean | undefined; + readonly calendar?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | undefined; + readonly locale?: string | undefined; + readonly pivot?: number | undefined; + readonly sphere?: Tempo.COMPASS | undefined; + readonly timeStamp?: Tempo.TimeStamp | undefined; + readonly mdyLocales?: string | import("#core/shared/type.library.js").SecureArray | undefined; + readonly mdyLayouts?: import("#core/shared/type.library.js").SecureArray | undefined; + readonly snippet?: string | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; + readonly layout?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | undefined; + readonly event?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject any; + readonly today: (this: any) => any; + readonly tomorrow: (this: any) => any; + readonly yesterday: (this: any) => any; + }, string, string | Function>> | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; + readonly period?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | undefined; + readonly formats?: import("#core/shared/type.library.js").SecureObject> | undefined; + readonly plugins?: Tempo.Plugin | import("#core/shared/type.library.js").SecureArray | undefined; + readonly value?: string | number | bigint | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | null | undefined; + readonly anchor?: import("#core/shared/type.library.js").SecureObject | undefined; + }>; + discovery: any; + storage: { + key: string; + scope: string; + } & Partial & Record; + global: { + [key: string]: any; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + anchor: Temporal.ZonedDateTime; + timeZone: Temporal.TimeZoneLike; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + }; + }; + /** Creates a new `Tempo` instance. */ + static from(options?: Tempo.Options): Tempo; + static from(tempo: Tempo.DateTime | undefined, options?: Tempo.Options): Tempo; + static now(): bigint; + /** static Tempo.terms getter */ + static get terms(): import("#core/shared/type.library.js").SecureArray<{ + key: string; + scope?: string; + description: string; + }>; + /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ + static addTerm(...plugin: Tempo.TermPlugin[]): void; + /** static Tempo properties getter */ + static get properties(): import("#core/shared/type.library.js").SecureArray; + /** Tempo initial default settings */ + static get default(): import("#core/shared/type.library.js").SecureObject<{ + readonly scope: "default"; + readonly timeZone: import("#core/shared/type.library.js").Extend<{ + readonly utc: "UTC"; + readonly gmt: "Europe/London"; + readonly est: "America/New_York"; + readonly cst: "America/Chicago"; + readonly mst: "America/Denver"; + readonly pst: "America/Los_Angeles"; + readonly aest: "Australia/Sydney"; + readonly acst: "Australia/Adelaide"; + readonly awst: "Australia/Perth"; + readonly nzt: "Pacific/Auckland"; + readonly cet: "Europe/Paris"; + readonly eet: "Europe/Helsinki"; + readonly ist: "Asia/Kolkata"; + readonly npt: "Asia/Kathmandu"; + readonly jst: "Asia/Tokyo"; + }, string, string>; + readonly store?: string | undefined; + readonly discovery?: string | undefined; + readonly debug?: boolean | undefined; + readonly catch?: boolean | undefined; + readonly calendar?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | undefined; + readonly locale?: string | undefined; + readonly pivot?: number | undefined; + readonly sphere?: Tempo.COMPASS | undefined; + readonly timeStamp?: Tempo.TimeStamp | undefined; + readonly mdyLocales?: string | import("#core/shared/type.library.js").SecureArray | undefined; + readonly mdyLayouts?: import("#core/shared/type.library.js").SecureArray | undefined; + readonly snippet?: string | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; + readonly layout?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | undefined; + readonly event?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject any; + readonly today: (this: any) => any; + readonly tomorrow: (this: any) => any; + readonly yesterday: (this: any) => any; + }, string, string | Function>> | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; + readonly period?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | undefined; + readonly formats?: import("#core/shared/type.library.js").SecureObject> | undefined; + readonly plugins?: Tempo.Plugin | import("#core/shared/type.library.js").SecureArray | undefined; + readonly value?: string | number | bigint | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | null | undefined; + readonly anchor?: import("#core/shared/type.library.js").SecureObject | undefined; + }>; + /** + * configuration governing the static 'rules' used when parsing Tempo.DateTime argument + */ + static get parse(): Tempo.Parse; + /** iterate over Tempo properties */ + static [Symbol.iterator](): ArrayIterator; + /** allow for auto-convert of Tempo to BigInt, Number or String */ + [Symbol.toPrimitive](hint?: 'string' | 'number' | 'default'): string | number | bigint; + /** iterate over instance formats */ + [Symbol.iterator](): ArrayIterator>; + get [Symbol.toStringTag](): string; + /** + * Instantiates a new `Tempo` object. + * + * @param tempo - The date-time value to parse. Can be a string, number, BigInt, Date, or another Tempo/Temporal object. + * @param options - Configuration options for this specific instance. + */ + constructor(options?: Tempo.Options); + constructor(tempo: Tempo.DateTime, options?: Tempo.Options); + /** 4-digit year (e.g., 2024) */ get yy(): number; + /** 4-digit ISO week-numbering year */ get wy(): number; + /** Month number: Jan=1, Dec=12 */ get mm(): Tempo.mm; + /** ISO week number of the year */ get ww(): Tempo.ww; + /** Day of the month (1-31) */ get dd(): number; + /** Day of the month (alias for `dd`) */ get day(): number; + /** Hour of the day (0-23) */ get hh(): Tempo.hh; + /** Minutes of the hour (0-59) */ get mi(): Tempo.mi; + /** Seconds of the minute (0-59) */ get ss(): Tempo.ss; + /** Milliseconds of the second (0-999) */ get ms(): Tempo.ms; + /** Microseconds of the millisecond (0-999) */ get us(): Tempo.us; + /** Nanoseconds of the microsecond (0-999) */ get ns(): Tempo.ns; + /** Fractional seconds (e.g., 0.123456789) */ get ff(): number; + /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz(): string; + /** Unix timestamp (defaults to milliseconds) */ get ts(): number | bigint; + /** Short month name (e.g., 'Jan') */ get mmm(): "All" | "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec"; + /** Full month name (e.g., 'January') */ get mon(): "May" | "Every" | "January" | "February" | "March" | "April" | "June" | "July" | "August" | "September" | "October" | "November" | "December"; + /** Short weekday name (e.g., 'Mon') */ get www(): "All" | "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun"; + /** Full weekday name (e.g., 'Monday') */ get wkd(): "Everyday" | "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday"; + /** ISO weekday number: Mon=1, Sun=7 */ get dow(): Tempo.Weekday; + /** Nanoseconds since Unix epoch (BigInt) */ get nano(): bigint; + /** current Tempo configuration */ + get config(): { + [key: string]: any; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + anchor: Temporal.ZonedDateTime; + timeZone: Temporal.TimeZoneLike; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + }; + /** Instance-specific parse rules (merged with global) */ get parse(): Tempo.Parse; + /** Object containing results from all term plugins */ get term(): Tempo.Terms; + /** Formatted results for all pre-defined format codes */ get fmt(): enums.Formats; + /** units since epoch */ get epoch(): import("#core/shared/type.library.js").SecureObject<{ + /** seconds since epoch */ readonly ss: number; + /** milliseconds since epoch */ readonly ms: number; + /** microseconds since epoch */ readonly us: number; + /** nanoseconds since epoch */ readonly ns: bigint; + }>; + /** time duration until (with unit, returns number) */ until(until: Tempo.Until, opts?: Tempo.Options): number; + /** time duration until another date-time (with unit) */ until(dateTimeOrOpts: Tempo.DateTime | Tempo.Options, until: Tempo.Until): number; + /** time duration until (returns Duration) */ until(dateTimeOrOpts?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options): Tempo.Duration; + /** time elapsed since (with unit) */ since(until: Tempo.Until, opts?: Tempo.Options): string; + /** time elapsed since another date-time (with unit) */ since(dateTimeOrOpts: Tempo.DateTime | Tempo.Options, until: Tempo.Until): string; + /** time elapsed since (without unit) */ since(dateTimeOrOpts?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options): string; + /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt: K): enums.FormatType; + /** returns a new `Tempo` with specific duration added. */ add(tempo?: Tempo.DateTime | Tempo.Options, options?: Tempo.Options): Tempo; + /** returns a new `Tempo` with specific offsets. */ set(tempo?: Tempo.DateTime | Tempo.Options, options?: Tempo.Options): Tempo; + /** returns a clone of the current `Tempo` instance. */ clone(): Tempo; + /** returns the underlying Temporal.ZonedDateTime */ toDateTime(): Temporal.ZonedDateTime; + /** returns a Temporal.PlainDate representation */ toPlainDate(): Temporal.PlainDate; + /** returns a Temporal.PlainTime representation */ toPlainTime(): Temporal.PlainTime; + /** returns a Temporal.PlainDateTime representation */ toPlainDateTime(): Temporal.PlainDateTime; + /** returns the underlying Temporal.Instant */ toInstant(): Temporal.Instant; + /** the date-time as a standard `Date` object. */ toDate(): Date; + /** the ISO8601 string representation of the date-time. */ toString(): string; + /** Custom JSON serialization for `JSON.stringify`. */ toJSON(): { + value: string; + /** configuration (global | local) */ scope: "global" | "local"; + /** pre-configured format strings */ formats: Tempo.Format; + anchor: Temporal.ZonedDateTime; + timeZone: Temporal.TimeZoneLike; + store: string; + discovery: string; + debug: boolean | undefined; + catch: boolean | undefined; + calendar: Temporal.CalendarLike; + locale: string; + sphere: Tempo.COMPASS | undefined; + timeStamp: Tempo.TimeStamp; + plugins: Tempo.Plugin | Tempo.Plugin[]; + }; + /** `true` if the underlying date-time is valid. */ isValid(): boolean; +} +export declare namespace Tempo { + /** the value that Tempo will attempt to interpret as a valid ISO date / time */ + export type DateTime = string | number | bigint | Date | Tempo | typeof Temporal | Temporal.ZonedDateTimeLike | undefined | null; + export type Pattern = string | RegExp; + export type Logic = string | number | Function; + export type Pair = [string, string]; + export type Groups = Record; + export type Registry = Map; + export type PatternOption = T | Record | PatternOption[]; + /** the Options object found in a config-module, or passed to a call to Tempo.init({}) or 'new Tempo({})' */ + export interface BaseOptions { + /** localStorage key */ store: string; + /** globalThis Discovery Symbol */ discovery: string; + /** additional console.log for tracking */ debug: boolean | undefined; + /** catch or throw Errors */ catch: boolean | undefined; + /** Temporal timeZone */ timeZone: Temporal.TimeZoneLike; + /** Temporal calendar */ calendar: Temporal.CalendarLike; + /** locale (e.g. en-AU) */ locale: string; + /** pivot year for two-digit years */ pivot: number; + /** hemisphere for term.qtr or term.szn */ sphere: Tempo.COMPASS | undefined; + /** granularity of timestamps (ms | ns) */ timeStamp: Tempo.TimeStamp; + /** locale-names that prefer 'mm-dd-yy' date order */ mdyLocales: string | string[]; + /** swap parse-order of layouts */ mdyLayouts: Tempo.Pair[]; + /** date-time snippets to help compose a Layout */ snippet: Snippet | Tempo.PatternOption; + /** patterns to help parse value */ layout: Layout | Tempo.PatternOption; + /** custom date aliases (events). */ event: Event | Tempo.PatternOption; + /** custom time aliases (periods). */ period: Period | Tempo.PatternOption; + /** custom format strings to merge in the FORMAT enum */ formats: Property; + /** plugins to be automatically Extended via Tempo.extend() */ plugins: Plugin | Plugin[]; + /** supplied value to parse */ value: Tempo.DateTime; + /** @internal temporary anchor used during parsing */ anchor: Temporal.ZonedDateTime; + } + export type Options = Partial & Record; + /** define a new term plugin */ + export type TermPlugin = { + key: string; + scope?: string; + description: string; + define: (this: Tempo, keyOnly?: boolean) => any; + }; + /** plugin function that can extend the Tempo prototype or static space */ + export type Plugin = (options: any, TempoClass: typeof Tempo, factory: (val: any) => Tempo) => void; + /** internal metadata for a plugin to track installation */ + export interface PluginContainer extends Plugin { + installed?: boolean; + } + /** the encapsulated state of a Tempo instance */ + export interface State { + /** current defaults for all Tempo instances */ config: Tempo.Config; + /** parsing rules */ parse: Tempo.Parse; + } + /** Debugging results of a parse operation. See `doc/tempo.api.md`. */ + export interface Parse { + /** Locales which prefer 'mm-dd-yyyy' date-order */ mdyLocales: { + locale: string; + timeZones: string[]; + }[]; + /** Layout names that are switched to mdy */ mdyLayouts: Tempo.Pair[]; + /** is a timeZone that prefers 'mmddyyyy' date order */ isMonthDay?: boolean; + /** Symbol registry */ token: Token; + /** Tempo snippets to aid in parsing */ snippet: Snippet; + /** Tempo layout strings */ layout: Layout; + /** Map of regex-patterns to match input-string */ pattern: Tempo.Registry; + /** configured Events */ event: Event; + /** configured Periods */ period: Period; + /** pivot year for two-digit years */ pivot?: number; + /** parsing match result */ result: Tempo.Match[]; + } + /** debug a Tempo instantiation */ + export interface Match { + /** pattern which matched the input */ match?: string | undefined; + /** groups from the pattern match */ groups?: Tempo.Groups; + /** the type of the original input */ type: LooseUnion; + /** the value of the original input */ value: any; + /** was this a nested/anchored parse? */ isAnchored?: boolean; + } + /** drop the parse-only Options */ + type OptionsKeep = Omit; + /** Instance configuration derived from supply, storage, and discovery. */ + export interface Config extends Required> { + /** configuration (global | local) */ scope: 'global' | 'local'; + /** pre-configured format strings */ formats: Format; + [key: string]: any; + } + /** Timestamp precision */ + export type TimeStamp = 'ss' | 'ms' | 'us' | 'ns'; + /** structured configuration for Global Discovery via Symbol.for('$Tempo') */ + export interface Discovery { + /** pre-defined config options for Tempo.#global */ options?: Options | (() => Options); + /** aliases to merge in the TimeZone dictionary */ timeZones?: Record; + /** term plugins to be registered via Tempo.addTerm() */ terms?: TermPlugin | TermPlugin[]; + /** plugins to be automatically extended via Tempo.extend() */ plugins?: Plugin | Plugin[]; + /** custom format strings to merge in the FORMAT dictionary */ formats?: Property; + } + /** Configuration to use for #until() and #since() argument */ + export type Unit = Temporal.DateUnit | Temporal.TimeUnit | Plural; + export type Until = (Tempo.Options & { + unit?: Tempo.Unit; + }) | Tempo.Unit; + export type Mutate = 'start' | 'mid' | 'end'; + export type Set = Partial & Record<'date' | 'time' | 'event' | 'period', string> & { + timeZone?: Temporal.TimeZoneLike; + calendar?: Temporal.CalendarLike; + }>; + export type Add = Partial>; + /** pre-configured format strings */ + export type OwnFormat = enums.OwnFormat; + /** mapping of format names to instance-resolutions (string | number) */ + export type Formats = enums.Formats; + /** Enum registry of format strings */ + export type Format = enums.FormatEnum; + export type FormatType = enums.FormatType; + /** mapping of terms to their resolved values */ + export type Terms = Property; + export type Modifier = '=' | '-' | '+' | '<' | '<=' | '-=' | '>' | '>=' | '+=' | 'this' | 'next' | 'prev' | 'last' | 'first' | undefined; + export type Relative = 'ago' | 'hence' | 'prior'; + export type mm = IntRange<0, 12>; + export type hh = IntRange<0, 24>; + export type mi = IntRange<0, 60>; + export type ss = IntRange<0, 60>; + export type ms = IntRange<0, 999>; + export type us = IntRange<0, 999>; + export type ns = IntRange<0, 999>; + export type ww = IntRange<1, 53>; + export type Duration = NonOptional & Record<"iso", string> & Record<"sign", number> & Record<"blank", boolean> & Record<"unit", string | undefined>; + export type WEEKDAY = enums.WEEKDAY; + export type WEEKDAYS = enums.WEEKDAYS; + export type MONTH = enums.MONTH; + export type MONTHS = enums.MONTHS; + export type DURATION = enums.DURATION; + export type DURATIONS = enums.DURATIONS; + export type COMPASS = enums.COMPASS; + export type ELEMENT = enums.ELEMENT; + export type Weekday = enums.Weekday; + export type Month = enums.Month; + export type Element = enums.Element; + /** Type for consistency in expected arguments for helper functions */ + export type Params = { + (tempo?: Tempo.DateTime, options?: Tempo.Options): T; + (options: Tempo.Options): T; + }; + export {}; +} +type Fmt = { + (fmt: F, tempo?: Tempo.DateTime, options?: Tempo.Options): enums.FormatType; + (fmt: F, options: Tempo.Options): enums.FormatType; +}; +/** check valid Tempo */ export declare const isTempo: (tempo?: unknown) => tempo is Tempo; +/** current timestamp (ts) */ export declare const getStamp: Tempo.Params; +/** create new Tempo */ export declare const getTempo: Tempo.Params; +/** format a Tempo */ export declare const fmtTempo: Fmt; +export {}; diff --git a/packages/tempo/dist/tempo.class.js b/packages/tempo/dist/tempo.class.js new file mode 100644 index 00000000..d38ee1ca --- /dev/null +++ b/packages/tempo/dist/tempo.class.js @@ -0,0 +1,1542 @@ +import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from "tslib"; +import '#core/temporal.polyfill.js'; // side-effect runtime check for Temporal +// #region library modules~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +import { Logify } from '#core/shared/logify.class.js'; +import { ifDefined } from '#core/shared/object.library.js'; +import { secure } from '#core/shared/utility.library.js'; +import { Immutable, Serializable } from '#core/shared/class.library.js'; +import { asArray, asNumber, asInteger, isNumeric, ifNumeric } from '#core/shared/coercion.library.js'; +import { cleanify, stringify } from '#core/shared/serialize.library.js'; +import { getStorage, setStorage } from '#core/shared/storage.library.js'; +import { ownKeys, ownEntries, getAccessors, omit } from '#core/shared/reflection.library.js'; +import { getProxy } from '#core/shared/proxy.library.js'; +import { getContext, CONTEXT } from '#core/shared/utility.library.js'; +import { pad, singular, toProperCase, trimAll } from '#core/shared/string.library.js'; +import { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#core/shared/type.library.js'; +import * as enums from '#core/tempo.config/tempo.enum.js'; +import registerTerms from '#core/tempo.config/terms/term.import.js'; +import { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#core/tempo.config/tempo.default.js'; +import '#core/shared/prototype.library.js'; // patch prototypes +// #region Const variables +/** key to use for storage / globalThis Symbol */ export const $Tempo = Symbol.for('$Tempo'); +/** current execution context*/ const Context = getContext(); +// #endregion Const variables +/** + * # Tempo + * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. + * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. + */ +let Tempo = (() => { + var _a, _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_conformToGroups; + let _classDecorators = [Serializable, Immutable]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + var Tempo = _a = class { + static { _classThis = this; } + static { __setFunctionName(this, "Tempo"); } + static { + const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; + __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); + Tempo = _classThis = _classDescriptor.value; + if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); + } + // #region Static enum properties~~~~~~~~~~~~~~~~~~~~~~~~~ + /** Weekday names (short-form) */ static get WEEKDAY() { return enums.WEEKDAY; } + /** Weekday names (long-form) */ static get WEEKDAYS() { return enums.WEEKDAYS; } + /** Month names (short-form) */ static get MONTH() { return enums.MONTH; } + /** Month names (long-form) */ static get MONTHS() { return enums.MONTHS; } + /** Time durations as seconds (singular) */ static get DURATION() { return enums.DURATION; } + /** Time durations as milliseconds (plural) */ static get DURATIONS() { return enums.DURATIONS; } + /** Quarterly Seasons */ static get SEASON() { return enums.SEASON; } + /** Compass cardinal points */ static get COMPASS() { return enums.COMPASS; } + /** Tempo to Temporal DateTime Units map */ static get ELEMENT() { return enums.ELEMENT; } + /** Pre-configured format {name -> string} pairs */ static get FORMAT() { return __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.formats; } + /** some useful Dates */ static get LIMIT() { return enums.LIMIT; } + static { + // #endregion + // #region Static private properties~~~~~~~~~~~~~~~~~~~~~~ + _Tempo_dbg = { value: new Logify('Tempo', { + debug: Default?.debug ?? false, + catch: Default?.catch ?? false + }) }; + } + static { + /** Tempo state for the global configuration */ _Tempo_global = { value: {} }; + } + static { + /** a collection of parse rule-matches */ _Tempo_pending = { value: void 0 }; + } + static { + /** cache for next-available 'usr' Token key */ _Tempo_usrCount = { value: 0 }; + } + static { + /** mutable list of registered term plugins */ _Tempo_terms = { value: [] }; + } + static { + /** try to infer hemisphere using the timezone's daylight-savings setting */ + _Tempo_setSphere = { value: (shape, options) => { + if (isUndefined(shape.config.timeZone) || __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, options, 'sphere')) + return shape.config.sphere; // already specified or no timeZone to calculate from + // use a fixed date (2024-01-01) to compare offsets for hemisphere detection + const zdt = new Temporal.ZonedDateTime(BigInt(1_704_067_200) * BigInt(1_000_000_000), shape.config.timeZone); + const jan = zdt.with({ day: 1, month: 1 }).offsetNanoseconds; + const jun = zdt.with({ day: 1, month: 6 }).offsetNanoseconds; + const dst = Math.sign(jan - jun); // timeZone offset difference between Jan and Jun + switch (dst) { + case -1: + return Tempo.COMPASS.North; // clock moves backward in Northern hemisphere + case 1: + return Tempo.COMPASS.South; // clock moves forward in Southern hemisphere + case 0: + default: + return void 0; // timeZone does not observe DST + } + } }; + } + static { + /** properCase week-day / calendar-month */ + _Tempo_prefix = { value: (str) => toProperCase(String(str).substring(0, 3)) }; + } + static { + /** get first Canonical name of a supplied locale */ + _Tempo_locale = { value: (locale) => { + let language; + try { // lookup locale + language = Intl.getCanonicalLocales(locale.replace('_', '-'))[0]; + } + catch (error) { } // catch unknown locale + const global = Context.global; + return language ?? + global?.navigator?.languages?.[0] ?? // fallback to current first navigator.languages[] + global?.navigator?.language ?? // else navigator.language + Default.locale ?? // else default locale + locale; // cannot determine locale + } }; + } + // #endregion Static private methods + // #region Static public methods~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** + * Bootstrap the library with a Custom Global Discovery object. + * + * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern + * and automatically calls `Tempo.init()` to apply the discovered configuration. + * + * @param config - The Global Discovery object to register. + * @returns The resolved global configuration. + */ + static discover(config) { + globalThis[$Tempo] = config; + return this.init(); + } + /** + * Initializes the global default configuration for all subsequent `Tempo` instances. + * + * Settings are inherited in this priority: + * 1. Reasonable library defaults (defined in tempo.config.js) + * 2. Persistent storage (e.g. localStorage), if available. + * 3. `options` provided to this method. + * + * @param options - Configuration overrides to apply globally. + * @returns The resolved global configuration. + */ + static init(options = {}) { + if (isEmpty(options)) { // if no options supplied, reset all + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse = { + snippet: Object.assign({}, Snippet), + layout: Object.assign({}, Layout), + event: Object.assign({}, Event), + period: Object.assign({}, Period), + mdyLocales: __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_mdyLocales).call(Tempo, Default.mdyLocales), + mdyLayouts: asArray(Default.mdyLayouts), + pivot: Default.pivot, + }; + const { timeZone, calendar } = Intl.DateTimeFormat().resolvedOptions(); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config = Object.assign({}, omit({ ...Default }, ...enums.PARSE.keys()), // use Default as base, omit parse-related + { + calendar, + timeZone, + locale: __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_locale).call(Tempo), + discovery: Symbol.keyFor($Tempo), + formats: Object.create(enums.FORMAT), + scope: 'global' + }); + __classPrivateFieldSet(Tempo, _classThis, 0, "f", _Tempo_usrCount); // reset user-key counter + for (const key of Object.keys(Token)) // purge user-allocated Tokens + if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys + delete Token[key]; + Tempo.addTerm(...registerTerms); // register built-in term plugins + const storeKey = Symbol.keyFor($Tempo); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), $Tempo)); + } + else { + const discovery = options.discovery ?? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.discovery ?? Symbol.keyFor($Tempo); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), discovery), options); + } + if (Context.type === CONTEXT.Browser || options.debug === true) + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(Tempo.config, 'Tempo:', __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config); + return Tempo.config; + } + /** release global config and reset library to defaults */ + static [(_Tempo_proto = function _Tempo_proto(obj) { return Object.getPrototypeOf(obj); }, _Tempo_hasOwn = function _Tempo_hasOwn(obj, key) { return Object.hasOwn(obj, key); }, _Tempo_isLocal = function _Tempo_isLocal(shape) { return shape.config.scope === 'local'; }, _Tempo_create = function _Tempo_create(obj, name) { return Object.create(__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, obj)[name]); }, _Tempo_setEvents = function _Tempo_setEvents(shape) { + const events = ownEntries(shape.parse.event, true); + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'event') && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'isMonthDay')) + return; // no local change needed + const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal + const groups = events + .map(([pat, _], idx) => `(?<${src}evt${idx}>${pat})`) // assign a number to the pattern + .join('|'); // make an 'Or' pattern for the event-keys + if (groups) { + const protoEvt = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.evt]?.source; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || groups !== protoEvt) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet')) + shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'snippet'); + Object.defineProperty(shape.parse.snippet, Token.evt, { + value: new RegExp(groups), + enumerable: true, + writable: true, + configurable: true + }); + } + } + if (shape.parse.isMonthDay) { + const protoDt = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.layout)[Token.dt]; + const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})'; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || localDt !== protoDt) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout')) + shape.parse.layout = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'layout'); + Object.defineProperty(shape.parse.layout, Token.dt, { + value: localDt, + enumerable: true, + writable: true, + configurable: true + }); + } + } + }, _Tempo_setPeriods = function _Tempo_setPeriods(shape) { + const periods = ownEntries(shape.parse.period, true); + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'period')) + return; // no local change needed + const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal + const groups = periods + .map(([pat, _], idx) => `(?<${src}per${idx}>${pat})`) // {pattern} is the 1st element of the tuple + .join('|'); // make an 'or' pattern for the period-keys + if (groups) { + const protoPer = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.per]?.source; + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || groups !== protoPer) { + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet')) + shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'snippet'); + Object.defineProperty(shape.parse.snippet, Token.per, { + value: new RegExp(groups), + enumerable: true, + writable: true, + configurable: true + }); + } + } + }, _Tempo_isMonthDay = function _Tempo_isMonthDay(shape) { + const monthDay = [...asArray(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.mdyLocales)]; + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales')) + monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global) + return monthDay.some(mdy => { + const tzs = mdy.timeZones ?? mdy.getTimeZones?.() ?? []; + return tzs.includes(shape.config.timeZone); + }); + }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) { + const layouts = ownEntries(shape.parse.layout); // get entries of Layout Record + const swap = shape.parse.mdyLayouts; // get the swap-tuple + let chg = false; // no need to rebuild, if no change + swap + .forEach(([dmy, mdy]) => { + const idx1 = layouts.findIndex(([key]) => key.description === dmy); // 1st swap element exists in {layouts} + const idx2 = layouts.findIndex(([key]) => key.description === mdy); // 2nd swap element exists in {layouts} + if (idx1 === -1 || idx2 === -1) + return; // no pair to swap + const swap1 = (idx1 < idx2) && shape.parse.isMonthDay; // we prefer {mdy} and the 1st tuple was found earlier than the 2nd + const swap2 = (idx1 > idx2) && !shape.parse.isMonthDay; // we dont prefer {mdy} and the 1st tuple was found later than the 2nd + if (swap1 || swap2) { // since {layouts} is an array, ok to swap by-reference + [layouts[idx1], layouts[idx2]] = [layouts[idx2], layouts[idx1]]; + chg = true; + } + }); + if (chg) + shape.parse.layout = Object.fromEntries(layouts); // rebuild Layout in new parse order + }, _Tempo_setConfig = function _Tempo_setConfig(shape, ...options) { + const mergedOptions = Object.assign({}, ...options); + if (isEmpty(mergedOptions)) // nothing to do + return; + if (mergedOptions.store) // check for local-storage + Object.assign(mergedOptions, { ...Tempo.readStore(mergedOptions.store), ...mergedOptions }); + /** helper to normalize snippet/layout Options into the target Config */ + const collect = (target, value, convert) => { + const itm = asType(value); + target ??= {}; + switch (itm.type) { + case 'Object': + ownEntries(itm.value) + .forEach(([k, v]) => target[Tempo.getSymbol(k)] = convert(v)); + break; + case 'String': + case 'RegExp': + target[Tempo.getSymbol()] = convert(itm.value); + break; + case 'Array': + itm.value.forEach(elm => collect(target, elm, convert)); + break; + } + }; + ownEntries(mergedOptions) + .forEach(([optKey, optVal]) => { + if (isUndefined(optVal)) + return; // skip undefined values + const arg = asType(optVal); + switch (optKey) { + case 'snippet': + case 'layout': + case 'event': + case 'period': + // lazy-shadowing: only create local object if it doesn't already exist on local shape + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, optKey)) + shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, optKey); + const rule = shape.parse[optKey]; + if (['snippet', 'layout'].includes(optKey)) { + collect(rule, arg.value, v => optKey === 'snippet' + ? isRegExp(v) ? v : new RegExp(v) + : isRegExp(v) ? v.source : v); + } + else { + asArray(arg.value) + .forEach(elm => ownEntries(elm).forEach(([key, val]) => rule[key] = val)); + } + break; + case 'mdyLocales': + shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_mdyLocales).call(Tempo, arg.value); + break; + case 'mdyLayouts': // these are the 'layouts' that need to swap parse-order + shape.parse[optKey] = asArray(arg.value); + break; + case 'pivot': + shape.parse["pivot"] = Number(arg.value); + break; + case 'config': + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, shape, arg.value); + break; + case 'timeZone': + const zone = String(arg.value).toLowerCase(); + shape.config.timeZone = TimeZone[zone] ?? arg.value; + break; + case 'formats': + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.config, 'formats')) + shape.config.formats = shape.config.formats.extend({}); // shadow parent prototype + if (isObject(arg.value)) + shape.config.formats = shape.config.formats.extend(arg.value); + break; + case 'discovery': + shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal; + break; + case 'plugins': + asArray(optVal).forEach(p => this.extend(p)); + break; + case 'anchor': + break; // internal anchor used for relativity parsing + default: // else just add to config + Object.assign(shape.config, { [optKey]: optVal }); + break; + } + }); + const isMonthDay = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isMonthDay).call(Tempo, shape); + if (isMonthDay !== __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local' + shape.parse.isMonthDay = isMonthDay; + shape.config.sphere = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_setSphere).call(Tempo, shape, mergedOptions); + if (isDefined(shape.parse.mdyLayouts)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_swapLayout).call(Tempo, shape); + if (isDefined(shape.parse.event)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setEvents).call(Tempo, shape); + if (isDefined(shape.parse.period)) + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setPeriods).call(Tempo, shape); + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setPatterns).call(Tempo, shape); // setup Regex DateTime patterns + }, _Tempo_mdyLocales = function _Tempo_mdyLocales(value) { + return asArray(value) + .map(mdy => new Intl.Locale(mdy)) + .map(mdy => ({ locale: mdy.baseName, timeZones: mdy.getTimeZones?.() ?? [] })); + }, _Tempo_setDiscovery = function _Tempo_setDiscovery(shape, key = shape.config.discovery ?? $Tempo) { + const sym = isString(key) ? Symbol.for(key) : key; + const discovery = globalThis[sym]; + if (!isObject(discovery)) + return {}; + // 1. Process TimeZones (normalize to lowercase for lookup) + const timeZones = discovery.timeZones ?? {}; + for (const [key, value] of Object.entries(timeZones)) + TimeZone[key.toLowerCase()] = value; + // 2. Process Terms + if (discovery.terms) + Tempo.addTerm(...asArray(discovery.terms)); + // 3. Process Formats + if (discovery.formats) + shape.config.formats = shape.config.formats.extend(discovery.formats); + // 4. Process Plugins + if (discovery.plugins) + asArray(discovery.plugins).forEach(p => this.extend(p)); + // 4. Process Options + let opts = discovery.options || {}; + return isFunction(opts) ? opts() : opts; + }, _Tempo_setPatterns = function _Tempo_setPatterns(shape) { + const snippet = shape.parse.snippet; + // if local and no snippet or layout overrides, we can just use the prototype's patterns + if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet') && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout')) + return; + // ensure we have our own Map to mutate (shadow if local) + if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'pattern')) + shape.parse.pattern = new Map(); + shape.parse.pattern.clear(); // reset {pattern} Map + for (const [sym, layout] of ownEntries(shape.parse.layout, true)) + shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet)); + }, Symbol.dispose)]() { Tempo.init(); } + /** + * Extends the Tempo class with new functionality. + * Plugins can add static or instance methods to the library. + */ + static extend(plugin, options) { + const p = plugin; + if (!p.installed) { + p(options, this, (val) => new this(val)); + p.installed = true; + } + return this; + } + /** Reads options from persistent storage (e.g., localStorage). */ + static readStore(key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { + return getStorage(key, {}); + } + /** Writes configuration into persistent storage. */ + static writeStore(config, key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { + return setStorage(key, config); + } + /** lookup or registers a new `Symbol` for a given key. */ + static getSymbol(key) { + var _b, _c; + if (isUndefined(key)) { + const usr = `usr.${__classPrivateFieldSet(_b = Tempo, _classThis, (_c = __classPrivateFieldGet(_b, _classThis, "f", _Tempo_usrCount), ++_c), "f", _Tempo_usrCount)}`; // allocate a prefixed 'user' key + return Token[usr] = Symbol(usr); // add to Symbol register + } + if (isSymbol(key)) + return key; + if (isString(key) && key.includes('.')) { + const description = key.split('.').pop(); // use last segment as description + return Token[key] ??= Symbol(description); + } + return Token[key] ?? Symbol.for(`$Tempo.${key}`); + } + /** translates {layout} into an anchored, case-insensitive RegExp. */ + static regexp(layout, snippet) { + // helper function to replace {name} placeholders with their corresponding snippets + function matcher(str, depth = 0) { + if (depth > 12) + return isRegExp(str) ? str.source : str; // depth guard + let source = isRegExp(str) ? str.source : str; + if (isRegExpLike(source)) // string that looks like a RegExp + source = source.substring(1, source.length - 1); // remove the leading/trailing "/" + if (source.startsWith('^') && source.endsWith('$')) + source = source.substring(1, source.length - 1); // remove the leading/trailing anchors (^ $) + return source.replace(Match.braces, (match, name) => { + const token = Tempo.getSymbol(name); // get the symbol for this {name} + const customs = snippet?.[token]?.source ?? snippet?.[name]?.source; + const globals = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.snippet[token]?.source ?? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.snippet[name]?.source; + const layout = Layout[token]; // get resolution source (layout) + let res = customs ?? globals ?? layout; // get the snippet/layout source + if (isNullish(res) && name.includes('.')) { // if no definition found, try fallback + const prefix = name.split('.')[0]; // get the base token name + const pToken = Tempo.getSymbol(prefix); + res = snippet?.[pToken]?.source ?? snippet?.[prefix]?.source + ?? Snippet[pToken]?.source ?? Snippet[prefix]?.source + ?? Layout[pToken]; + } + if (res && name.includes('.')) { // wrap dotted extensions for identification + const safeName = name.replace(/\./g, '_'); + if (!res.startsWith(`(?<${safeName}>`)) + res = `(?<${safeName}>${res})`; + } + return (isNullish(res) || res === match) // if no definition found, + ? match // return the original match + : matcher(res, depth + 1); // else recurse to see if snippet contains embedded "{}" pairs + }); + } + layout = matcher(layout); // initiate the layout-parse + return new RegExp(`^(${layout})$`, 'i'); // translate the source into a regex + } + /** Compares two `Tempo` instances or date-time values. */ + static compare(tempo1, tempo2) { + const one = new Tempo(tempo1), two = new Tempo(tempo2); + return Number((one.nano > two.nano) || -(one.nano < two.nano)) + 0; + } + /** global Tempo configuration */ + static get config() { + return getProxy(omit({ ...__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config }, 'value')); + } + /** global discovery configuration */ + static get discovery() { + const sym = Symbol.for(this.config.discovery); + return getProxy(omit({ ...globalThis[sym], scope: 'discovery' }, 'value')); + } + /** + * Returns a snapshot of the configuration layers used by Tempo. + * Useful for debugging how the final configuration is built. + */ + static get options() { + const keyFor = this.config.store ?? Symbol.keyFor($Tempo); + return { + default: this.default, + discovery: this.discovery, + storage: getProxy(Object.assign({ key: keyFor, scope: 'storage' }, omit(Tempo.readStore(keyFor), 'value'))), + global: this.config, + }; + } + static from(tempo, options) { return new this(tempo, options); } + static now() { return Temporal.Now.instant().epochNanoseconds; } + /** static Tempo.terms getter */ + static get terms() { + return secure(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) + .map(({ define, ...rest }) => rest)); // omit the 'define' method + } + /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ + static addTerm(...plugin) { + asArray(plugin) + .flat(1) + .forEach(p => { + if (!__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).some(t => t.key === p.key)) // check for duplicate key + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).push(p); // append; silently ignore duplicates + }); + } + /** static Tempo properties getter */ + static get properties() { + return secure(getAccessors(Tempo) + .filter(acc => getType(acc) !== 'Symbol')); // omit any Symbol properties + } + /** Tempo initial default settings */ + static get default() { + return secure({ ...Default, scope: 'default', timeZone: TimeZone }); + } + /** + * configuration governing the static 'rules' used when parsing Tempo.DateTime argument + */ + static get parse() { + const parse = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse; + return secure({ + ...parse, // spread primitives like {pivot} + snippet: { ...parse.snippet }, // spread nested objects + layout: { ...parse.layout }, + event: { ...parse.event }, + period: { ...parse.period }, + mdyLocales: [...parse.mdyLocales], + mdyLayouts: [...parse.mdyLayouts], + }); + } + /** iterate over Tempo properties */ + static [(_Tempo_conformToGroups = function _Tempo_conformToGroups(tempo) { + const groups = {}; + if ('year' in tempo) { + groups.yy = tempo.year.toString().padStart(4, '0'); + groups.mm = tempo.month.toString().padStart(2, '0'); + groups.dd = tempo.day.toString().padStart(2, '0'); + } + if ('hour' in tempo) { + groups.hh = tempo.hour.toString().padStart(2, '0'); + groups.mi = tempo.minute.toString().padStart(2, '0'); + groups.ss = tempo.second.toString().padStart(2, '0'); + groups.ff = tempo.nanosecond.toString().padStart(9, '0'); + } + return groups; + }, Symbol.iterator)]() { + return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters' + } + // #endregion Static public methods + // #region Instance symbols~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** allow for auto-convert of Tempo to BigInt, Number or String */ + [Symbol.toPrimitive](hint) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.config, getType(this), '.hint: ', hint); + switch (hint) { + case 'string': return this.toString(); // ISO 8601 string + case 'number': return this.epoch.ms; // Unix epoch (milliseconds) + default: return this.nano; // Unix epoch (nanoseconds) + } + } + /** iterate over instance formats */ + [Symbol.iterator]() { + return ownEntries(this.#fmt)[Symbol.iterator](); // instance Iterator over tuple of FormatType[] + } + get [Symbol.toStringTag]() { + return 'Tempo'; // hard-coded to avoid minification mangling + } + // #endregion Instance symbols + // #region Instance properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** constructor tempo */ #tempo; + /** constructor options */ #options = {}; + /** instantiation Temporal Instant */ #now; + /** underlying Temporal ZonedDateTime */ #zdt; + /** temporary anchor used during parsing */ #anchor; + /** prebuilt formats, for convenience */ #fmt = {}; + /** instance term plugins */ #term = Object.create(null); + /** instance values to complement static values */ #local = { + /** instance configuration */ config: {}, + /** instance parse rules (only populated if provided) */ parse: { result: [] } + }; + constructor(tempo, options = {}) { + this.#now = Temporal.Now.instant(); // stash current Instant + [this.#tempo, this.#options] = this.#swap(tempo, options); // swap arguments around, if arg1=Options or Temporal-like + this.#setLocal(this.#options); // parse the local options looking for overrides to Tempo.#global.config + // we now have all the info we need to instantiate a new Tempo + try { + this.#anchor = this.#options.anchor; + this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg + if (['iso8601', 'gregory'].includes(this.#local.config['calendar'])) { + for (const key of this.#local.config.formats.keys()) + Object.assign(this.#fmt, { [key]: this.format(key) }); + } + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) // add the plug-in getters for the pre-defined Terms to the instance + .forEach(({ key, scope, define }) => { + this.#setTerm(this, key, define, true); // add a getter which returns the key-field only + this.#setTerm(this, scope, define, false); // add a getter which returns a range-object + }); + if (isDefined(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending))) { // are we mutating with 'set()' ? + this.#local.parse.result.unshift(...__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending)); // prepend collected parse-matches + __classPrivateFieldSet(Tempo, _classThis, void 0, "f", _Tempo_pending); // and reset mutating-flag + } + secure(this.#fmt); // prevent mutations + secure(this.#term); // secure the initial object with getters + secure(this.#local.config); + secure(this.#local.parse); + } + catch (err) { + console.error('Tempo Constructor Error:', err); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.config, `Cannot create Tempo: ${err.message}\n${err.stack}`); + return {}; // return empty Object + } + } + // This function has be defined within the Tempo class (and not imported from another module) because it references a private-variable + /** this will add a getter on the instance #term private field */ + #setTerm(self, name, define, isKeyOnly) { + if (isDefined(name) && isDefined(define)) { + Object.defineProperty(self.#term, name, { + configurable: false, + enumerable: false, + get: function () { + const value = define.call(self, isKeyOnly); // evaluate the term range-lookup + self.#term = secure(Object.create(self.#term, { + [name]: { + value, + configurable: false, + writable: false, + enumerable: true + } + })); + return secure(value); + } + }); + } + } + // #endregion Constructor + // #region Instance public accessors~~~~~~~~~~~~~~~~~~~~~~ + /** 4-digit year (e.g., 2024) */ get yy() { return this.toDateTime().year; } + /** 4-digit ISO week-numbering year */ get wy() { return this.ww === 1 && this.mm === Tempo.MONTH.Dec ? this.yy + 1 : (this.ww >= 52 && this.mm === Tempo.MONTH.Jan ? this.yy - 1 : this.yy); } + /** Month number: Jan=1, Dec=12 */ get mm() { return this.toDateTime().month; } + /** ISO week number of the year */ get ww() { return this.toDateTime().weekOfYear; } + /** Day of the month (1-31) */ get dd() { return this.toDateTime().day; } + /** Day of the month (alias for `dd`) */ get day() { return this.toDateTime().day; } + /** Hour of the day (0-23) */ get hh() { return this.toDateTime().hour; } + /** Minutes of the hour (0-59) */ get mi() { return this.toDateTime().minute; } + /** Seconds of the minute (0-59) */ get ss() { return this.toDateTime().second; } + /** Milliseconds of the second (0-999) */ get ms() { return this.toDateTime().millisecond; } + /** Microseconds of the millisecond (0-999) */ get us() { return this.toDateTime().microsecond; } + /** Nanoseconds of the microsecond (0-999) */ get ns() { return this.toDateTime().nanosecond; } + /** Fractional seconds (e.g., 0.123456789) */ get ff() { return +(`0.${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`); } + /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz() { return this.toDateTime().timeZoneId; } + /** Unix timestamp (defaults to milliseconds) */ get ts() { return this.epoch[this.#local.config.timeStamp]; } + /** Short month name (e.g., 'Jan') */ get mmm() { return Tempo.MONTH.keyOf(this.#zdt.month); } + /** Full month name (e.g., 'January') */ get mon() { return Tempo.MONTHS.keyOf(this.#zdt.month); } + /** Short weekday name (e.g., 'Mon') */ get www() { return Tempo.WEEKDAY.keyOf(this.#zdt.dayOfWeek); } + /** Full weekday name (e.g., 'Monday') */ get wkd() { return Tempo.WEEKDAYS.keyOf(this.toDateTime().dayOfWeek); } + /** ISO weekday number: Mon=1, Sun=7 */ get dow() { return this.toDateTime().dayOfWeek; } + /** Nanoseconds since Unix epoch (BigInt) */ get nano() { return this.toDateTime().epochNanoseconds; } + /** current Tempo configuration */ + get config() { + return getProxy(omit({ ...this.#local.config }, 'scope', 'value', 'anchor')); + } + /** Instance-specific parse rules (merged with global) */ get parse() { return this.#local.parse; } + /** Object containing results from all term plugins */ get term() { return getProxy(this.#term); } + /** Formatted results for all pre-defined format codes */ get fmt() { return this.#fmt; } + /** units since epoch */ get epoch() { + return secure({ + /** seconds since epoch */ ss: Math.trunc(this.toDateTime().epochMilliseconds / 1_000), + /** milliseconds since epoch */ ms: this.toDateTime().epochMilliseconds, + /** microseconds since epoch */ us: Number(this.toDateTime().epochNanoseconds / BigInt(1_000)), + /** nanoseconds since epoch */ ns: this.toDateTime().epochNanoseconds, + }); + } + // #endregion Instance public accessors + // #region Instance private accessors + /** + * @Immutable class decorators wrap the class but leave internal lexical bindings pointing to the original, undecorated class. + * To ensure new instances returned by instance methods are properly frozen, + * we must instantiate internally from the decorated wrapper (which is bound to `this.constructor`) + * rather than using `new Tempo(..)`. + */ + get #Tempo() { return this.constructor; } + /** time duration until another date-time */ until(optsOrDate, optsOrUntil) { return this.#until(optsOrDate, optsOrUntil); } + /** time elapsed since another date-time */ since(optsOrDate, optsOrUntil) { return this.#since(optsOrDate, optsOrUntil); } + /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt) { return this.#format(fmt); } + /** returns a new `Tempo` with specific duration added. */ add(tempo, options) { return this.#add(tempo, options); } + /** returns a new `Tempo` with specific offsets. */ set(tempo, options) { return this.#set(tempo, options); } + /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config); } + /** returns the underlying Temporal.ZonedDateTime */ toDateTime() { return this.#zdt ?? this.#anchor ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone); } + /** returns a Temporal.PlainDate representation */ toPlainDate() { return this.toDateTime().toPlainDate(); } + /** returns a Temporal.PlainTime representation */ toPlainTime() { return this.toDateTime().toPlainTime(); } + /** returns a Temporal.PlainDateTime representation */ toPlainDateTime() { return this.toDateTime().toPlainDateTime(); } + /** returns the underlying Temporal.Instant */ toInstant() { return this.toDateTime().toInstant(); } + /** the date-time as a standard `Date` object. */ toDate() { return new Date(this.toDateTime().round({ smallestUnit: enums.ELEMENT.ms }).epochMilliseconds); } + /** the ISO8601 string representation of the date-time. */ toString() { return this.toPlainDateTime().toString({ calendarName: 'never' }); } + /** Custom JSON serialization for `JSON.stringify`. */ toJSON() { return omit({ ...this.#local.config, value: this.toString() }, 'scope', 'store'); } + /** `true` if the underlying date-time is valid. */ isValid() { return !isEmpty(this); } + // #endregion Instance public methods + // #region Instance private methods~~~~~~~~~~~~~~~~~~~~~~~ + /** setup local 'config' and 'parse' rules (prototype-linked to global) */ + #setLocal(options) { + // setup local config (prototype-linked to global config) + this.#local.config = Object.create(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config); + Object.assign(this.#local.config, { scope: 'local' }); + // setup local parse rules (prototype-linked to global parse) + this.#local.parse = Object.create(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse); + this.#local.parse.result = []; + __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, this.#local, options); // set #local config + } + /** parse DateTime input */ + #parse(tempo, dateTime) { + const today = (dateTime ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone)) + .withTimeZone(this.#local.config.timeZone); + const { type, value } = this.#conform(tempo, today, isDefined(dateTime)); + // evaluate latest timezone / calendar (after #conform which might have updated them) + const { timeZone, calendar } = this.#local.config; + const tz = isString(timeZone) ? timeZone : timeZone.id ?? timeZone.timeZoneId; + const cal = isString(calendar) ? calendar : calendar.id ?? calendar.calendarId; + if (isEmpty(this.#local.parse.result) && isUndefined(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending))) // #conform() didn't find any matches + this.#local.parse.result = [{ type, value }]; + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'parse', `{type: ${type}, value: ${value}}`); // show what we're parsing + switch (type) { + case 'Null': + case 'Void': + case 'Empty': + case 'Undefined': + return today; + case 'String': // String which didn't conform to a Tempo.pattern + try { + const str = value.replace(/Z$/, ''); // requested Z-stripping for adoption + const zdt = Temporal.ZonedDateTime.from(str.includes('[') ? str : `${str}[${tz}]`); + if (this.#local) + this.#local.config.timeZone = zdt.timeZoneId; + return zdt; + } + catch (err) { // else see if Date.parse can parse value + this.#result({ type: 'String', value }, { match: 'Date.parse' }); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, 'Cannot detect DateTime; fallback to Date.parse'); + if (Match.date.test(value)) { + try { + return Temporal.PlainDate.from(value).toZonedDateTime(tz).withCalendar(cal); + } + catch { /* ignore and fallback */ } + } + try { + return Temporal.PlainDateTime.from(value).toZonedDateTime(tz).withCalendar(cal); + } + catch { /* ignore and fallback to Date.parse */ } + const date = new Date(value.toString()); + if (isNaN(date.getTime())) + return __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Cannot parse Date: "${value}"`); + return Temporal.ZonedDateTime // adopt instance timezone + .from(`${date.toISOString().substring(0, 23)}[${tz}]`) + .withCalendar(cal); + } + case 'Temporal.ZonedDateTime': // ZonedDateTime object: convert to instance timezone + return (value.timeZoneId === tz && value.calendarId === cal) + ? value + : value.withTimeZone(tz).withCalendar(cal); + case 'Temporal.PlainDate': + case 'Temporal.PlainDateTime': + return value + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.PlainTime': + return today.withPlainTime(value); + case 'Temporal.PlainYearMonth': // assume current day, else end-of-month + return value + .toPlainDate({ day: Math.min(today.day, value.daysInMonth) }) + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.PlainMonthDay': // assume current year + return value + .toPlainDate({ year: today.year }) + .toZonedDateTime(tz) + .withCalendar(cal); + case 'Temporal.Instant': + return value + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'Tempo': + return value + .toDateTime() + .withTimeZone(tz) + .withCalendar(cal); // apply instance timezone to cloned Tempo + case 'Date': + return Temporal.Instant.fromEpochMilliseconds(value.getTime()) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'Number': // Number which didn't conform to a Tempo.pattern + const [seconds = BigInt(0), suffix = BigInt(0)] = value.toString().split('.').map(BigInt); + const nano = BigInt(suffix.toString().substring(0, 9).padEnd(9, '0')); + return Temporal.Instant.fromEpochNanoseconds(seconds * BigInt(1_000_000_000) + nano) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + case 'BigInt': // BigInt is not conformed against a Tempo.pattern + return Temporal.Instant.fromEpochNanoseconds(value) + .toZonedDateTimeISO(tz) + .withCalendar(cal); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected Tempo parameter type: ${type}, ${String(value)}`); + return today; + } + } + /** resolve constructor / method arguments */ + #swap(tempo, options = {}) { + return this.#isOptions(tempo) + ? [tempo.value, { ...tempo }] + : [tempo, { ...options }]; + } + /** check if we've been given a Tempo Options object */ + #isOptions(arg) { + if (!isObject(arg) || arg.constructor !== Object) + return false; + const keys = ownKeys(arg); // if it contains any 'mutation' keys, then it's not (just) an options object + if (keys.some(key => enums.MUTATION.has(key))) + return false; + return keys + .some(key => enums.OPTION.has(key)); + } + /** check if we've been given a ZonedDateTimeLike object */ + #isZonedDateTimeLike(tempo) { + if (!isObject(tempo) || isEmpty(tempo)) + return false; + // if it contains any 'options' keys, it's not a ZonedDateTime + const keys = ownKeys(tempo); + if (keys.some(key => enums.OPTION.has(key) && key !== 'value')) + return false; + // we include {value} to allow for Tempo instances + return keys + .filter(isString) + .every((key) => enums.ZONED_DATE_TIME.has(key)); + } + #result(...rest) { + const match = Object.assign({}, ...rest); // collect all object arguments + if (!isEmpty(match.groups)) { + if (isDefined(this.#anchor) && !match.isAnchored) + match.isAnchored = true; + (__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending) ?? this.#local.parse.result).push(match); + } + } + /** evaluate 'string | number' input against known patterns */ + #conform(tempo, dateTime, isAnchored = false) { + const arg = asType(tempo); + const { type, value } = arg; + if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property) + const { timeZone, calendar, value, ...options } = tempo; + let zdt = !isEmpty(options) + ? dateTime.with({ ...options }) + : dateTime; + if (timeZone) + zdt = zdt.withTimeZone(timeZone); // optionally set timeZone + if (calendar) + zdt = zdt.withCalendar(calendar); // optionally set calendar + this.#result({ type: 'Temporal.ZonedDateTimeLike', value: zdt, match: 'Temporal.ZonedDateTimeLike' }); + return Object.assign(arg, { + type: 'Temporal.ZonedDateTime', // override {arg.type} + value: zdt, + }); + } + if (type !== 'String' && type !== 'Number') { + this.#result(arg, { match: type }); + return arg; + } + if (isFunction(value)) { + const res = value.call(this); + return this.#conform(res, dateTime, isAnchored); + } + const trim = trimAll(value); + if (type === 'String') { // if original value is String + if (isEmpty(trim)) { // don't conform empty string + this.#result(arg, { match: 'Empty' }); + return Object.assign(arg, { type: 'Empty' }); + } + if (isIntegerLike(trim)) { // if string representation of BigInt literal + this.#result(arg, { match: 'BigInt' }); + return Object.assign(arg, { type: 'BigInt', value: asInteger(trim) }); + } + } + else { // else it is a Number + if (trim.length <= 7) { // cannot reliably interpret small numbers: might be {ss} or {yymmdd} or {dmmyyyy} + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, 'Cannot safely interpret number with less than 8-digits: use string instead'); + return arg; + } + } + // const isSimpleIsoOrNumeric = typeof value === 'string' && (Match.date.test(value) || /^\d+$/.test(value)); + const map = this.#local.parse.pattern; + for (const [sym, pat] of map) { + const groups = this.#parseMatch(pat, trim); // determine pattern-match groups + if (isEmpty(groups)) + continue; // no match, so skip this iteration + this.#result(arg, { match: sym.description, groups: cleanify(groups) }); // stash the {key} of the pattern that was matched + dateTime = this.#parseZone(groups, dateTime); // resolve timezone early so events can use it + dateTime = this.#parseGroups(groups, dateTime); // mutate the {groups} object (resolves events/periods) + dateTime = this.#parseWeekday(groups, dateTime); // if {weekDay} pattern, calculate a calendar value + dateTime = this.#parseDate(groups, dateTime); // if {calendar}|{event} pattern, translate to date value + dateTime = this.#parseTime(groups, dateTime); // if {clock}|{period} pattern, translate to a time value + /** + * finished analyzing a matched pattern. + * rebuild {arg.value} into a ZonedDateTime + */ + // if no time-components were matched, strip time to midnight baseline + if (!isAnchored && !['hh', 'mi', 'ss', 'ff', 'mer', 'per'].some(key => isDefined(groups[key]))) + dateTime = dateTime.withPlainTime('00:00:00'); + Object.assign(arg, { type: 'Temporal.ZonedDateTime', value: dateTime }); + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'groups', groups); // show the resolved date-time elements + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'pattern', sym.description); // show the pattern that was matched + break; // stop checking patterns + } + return arg; + } + /** apply a regex-match against a value, and clean the result */ + #parseMatch(pat, value) { + const groups = value.toString().match(pat)?.groups || {}; + ownEntries(groups) // remove undefined, NaN, null and empty values + .forEach(([key, val]) => isEmpty(val) && delete groups[key]); + return groups; + } + /** resolve {event} | {period} to their date | time values (mutates groups) */ + #parseGroups(groups, dateTime) { + this.#anchor = dateTime; // temporarily anchor the instance so events resolve relative to current state + try { + for (const key of ownKeys(groups)) { + const isEvent = Match.event.test(key); + const isPeriod = Match.period.test(key); + if (!isEvent && !isPeriod) + continue; + const idx = +key.substring(4); + const src = key.startsWith('g') ? (isEvent ? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.event : __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.period) : (isEvent ? this.#local.parse.event : this.#local.parse.period); + const entry = ownEntries(src, true)[idx]; + if (!entry) + continue; + const definition = entry[1]; + const res = isFunction(definition) ? definition.call(this).toString() : definition; + const resGroups = isEvent ? this.#parseEvent(res) : this.#parsePeriod(res); + Object.assign(groups, resGroups); + delete groups[key]; + } + } + finally { + this.#anchor = void 0; // reset anchor + } + // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date) + if (isDefined(groups["mm"]) && !isNumeric(groups["mm"])) { + const mm = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_prefix).call(Tempo, groups["mm"]); // conform month-name + groups["mm"] = Tempo.MONTH.keys().findIndex((el) => el === mm).toString().padStart(2, '0'); + } + // Apply mutated groups to dateTime + if (isDefined(groups.yy) || isDefined(groups.mm) || isDefined(groups.dd)) + dateTime = this.#parseDate(groups, dateTime); + if (isDefined(groups.hh) || isDefined(groups.mi) || isDefined(groups.ss) || isDefined(groups.ff) || isDefined(groups.mer)) + dateTime = this.#parseTime(groups, dateTime); + return dateTime; + } + /** + * We expect similar offset-logic to apply to 'modifiers' when parsing a string DateTime. + * returns {adjust} to make, based on {modifier}, {offset}, and {period} + * - previous period + * + next period + * -3 three periods ago + * < prior to base-date (asIs) + * <= prior to base-date (plus one) + */ + #parseModifier({ mod, adjust, offset, period }) { + adjust = Math.abs(adjust); + switch (mod) { + case void 0: // no adjustment + case '=': + case 'this': // current period + return 0; + case '+': // next period + case 'next': + return adjust; + case '-': // previous period + case 'prev': + case 'last': + return -adjust; + case '<': // period before base-date + case 'ago': + return (period <= offset) + ? -adjust + : -(adjust - 1); + case '<=': // period before or including base-date + return (period < offset) + ? -adjust + : -(adjust - 1); + case '>': // period after base-date + case 'hence': + return (period > offset) + ? adjust + : (adjust - 1); + case '>=': // period after or including base-date + case '+=': + return (period >= offset) + ? adjust + : (adjust - 1); + default: // unexpected modifier + return 0; + } + } + /** + * if named-group 'wkd' detected (with optional 'mod', 'nbr', 'sfx' or time-units), then calc relative weekday offset + * | Example | Result | Note | + * | :--- | :---- | :---- | + * | `Wed` | Wed this week | might be earlier or later or equal to current day | + * | `-Wed` | Wed last week | same as new Tempo('Wed').add({ weeks: -1 }) | + * | `+Wed` | Wed next week | same as new Tempo('Wed').add({ weeks: 1 }) | + * | `-3Wed` | Wed three weeks ago | same as new Tempo('Wed').add({ weeks: -3 }) | + * | `', hh: '10', mer: 'pm'} + * we early-exit if we find anything other than time-units + */ + const time = ['hh', 'mi', 'ss', 'ms', 'us', 'ns', 'ff', 'mer']; + if (!ownKeys(rest) + .every(key => time.includes(key))) // non 'time-unit' keys detected + return dateTime; // this is not a true {weekDay} pattern, so early-exit + if (!isEmpty(mod) && !isEmpty(sfx)) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${sfx}'`); + return dateTime; // cannot provide both 'modifier' and 'suffix' + } + const weekday = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_prefix).call(Tempo, wkd); // conform weekday-name + const adjust = +nbr; // how many weeks to adjust + const offset = Tempo.WEEKDAY.keys() // how far weekday is from today + .findIndex((el) => el === weekday); + const days = offset - dateTime.dayOfWeek // number of days to offset from dateTime + + (this.#parseModifier({ mod: mod ?? sfx, adjust, offset, period: dateTime.dayOfWeek }) * dateTime.daysInWeek); + delete groups["wkd"]; + delete groups["mod"]; + delete groups["nbr"]; + delete groups["sfx"]; + return dateTime + .add({ days }); // set new {day} + } + /** + * match input against date patterns + * @returns adjusted ZonedDateTime with resolved time-components + */ + #parseDate(groups, dateTime) { + const { mod, nbr = '1', afx, unt, yy, mm, dd } = groups; + if (isEmpty(yy) && isEmpty(mm) && isEmpty(dd) && isUndefined(unt)) + return dateTime; // return default + if (!isEmpty(mod) && !isEmpty(afx)) { + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${afx}'`); + return dateTime; + } + let { year, month, day } = this.#num({ + year: yy ?? dateTime.year, // supplied year, else current year + month: mm ?? dateTime.month, // supplied month, else current month + day: dd ?? dateTime.day, // supplied day, else current day + }); + // handle {unt} relative offset (e.g. '2 days ago') + if (unt) { + const adjust = +nbr; + const direction = (mod === '<' || mod === '-' || afx === 'ago') ? -1 : 1; + const plural = singular(unt) + 's'; + dateTime = dateTime.add({ [plural]: adjust * direction }); + delete groups["unt"]; + delete groups["nbr"]; + delete groups["afx"]; + delete groups["mod"]; + return dateTime; + } + // convert 2-digit year to 4-digits using 'pivot-year' (relative to current century) + if (year.toString().match(Match.twoDigit)) { // if {year} match just-two digits + const pivot = dateTime + .subtract({ years: this.#local.parse["pivot"] }) // pivot cutoff to determine century + .year % 100; // remainder + const century = Math.trunc(dateTime.year / 100); // current century + year += (century - Number(year >= pivot)) * 100; // now a four-digit year + } + // adjust the {year} if a Modifier is present + const adjust = +nbr; // how many years to adjust + const offset = Number(pad(month) + '.' + pad(day)); // the event month.day + const period = Number(pad(dateTime.month) + '.' + pad(dateTime.day + 1)); + year += this.#parseModifier({ mod: mod ?? afx, adjust, offset, period }); + Object.assign(groups, { yy: year, mm: month, dd: day }); + delete groups["mod"]; + delete groups["nbr"]; + delete groups["afx"]; + // all date-components are now set; check for overflow in case past end-of-month + return Temporal.PlainDate.from({ year, month, day }, { overflow: 'constrain' }) + .toZonedDateTime(dateTime.timeZoneId) // adjust to constrained date + .withPlainTime(dateTime.toPlainTime()); // restore the time + } + /** match input against 'tm' pattern (returns adjusted ZonedDateTime) */ + #parseTime(groups = {}, dateTime) { + if (isUndefined(groups["hh"])) // must contain 'time' with at least {hh} + return dateTime; + let { hh = 0, mi = 0, ss = 0, ms = 0, us = 0, ns = 0 } = this.#num(groups); + if (hh >= 24) { + dateTime = dateTime.add({ days: Math.trunc(hh / 24) }); // move the date forward number of days to offset + hh %= 24; // midnight is '00:00' on the next-day + } + if (isDefined(groups["ff"])) { // {ff} is fractional seconds and overrides {ms|us|ns} + const ff = groups["ff"].substring(0, 9).padEnd(9, '0'); + ms = +ff.substring(0, 3); + us = +ff.substring(3, 6); + ns = +ff.substring(6, 9); + } + if (groups["mer"]?.toLowerCase() === 'pm' && hh < 12 && (hh + mi + ss + ms + us + ns) > 0) + hh += 12; // anything after midnight and before midday + if (groups["mer"]?.toLowerCase() === 'am' && hh >= 12) + hh -= 12; // anything after midday + return dateTime // return the computed time-values + .withPlainTime({ hour: hh, minute: mi, second: ss, millisecond: ms, microsecond: us, nanosecond: ns }); + } + /** + * apply a timezone or calendar bracket to the current ZonedDateTime + * normalization is applied to ensure 'Z' is treated as 'UTC' + */ + #parseZone(groups, dateTime) { + const tzd = groups["tzd"]?.replace(Match.zed, 'UTC'); // normalize timezone/offset + const brk = groups["brk"]?.replace(Match.zed, 'UTC'); // handle bracketed timezone + const zone = brk || tzd; + if (zone && zone !== dateTime.timeZoneId && !zone.startsWith('u-ca=')) { + if (this.#local) + this.#local.config.timeZone = zone; // update local config if exists + dateTime = dateTime.toPlainDateTime().toZonedDateTime(zone); // adopt timezone override (stable) + } + const cal = groups["cal"]; + if (cal && cal !== dateTime.calendarId) { + const calendar = cal.startsWith('u-ca=') ? cal.substring(5) : cal; + this.#local.config.calendar = calendar; + dateTime = dateTime.withCalendar(calendar); + } + delete groups["brk"]; + delete groups["cal"]; + delete groups["tzd"]; + return dateTime; + } + /** match an {event} string against a date pattern */ + #parseEvent(evt) { + const groups = {}; + const pats = this.#local.parse.isMonthDay // first find out if we have a US-format timeZone + ? ['mdy', 'dmy', 'ymd'] // if so, try {mdy} before {dmy} + : ['dmy', 'mdy', 'ymd']; // else try {dmy} before {mdy} + for (const pat of pats) { + const reg = this.#getPattern(pat); + if (isDefined(reg)) { + const match = this.#parseMatch(reg, evt); + if (!isEmpty(match)) { + this.#result({ type: 'Event', value: evt, match: pat, groups: cleanify(match) }); + Object.assign(groups, match); + } + } + if (!isEmpty(groups)) + break; // return on the first matched pattern + } + return groups; // overlay the match date-components + } + /** match a {period} string against the time pattern */ + #parsePeriod(per) { + const groups = {}; + const tm = this.#getPattern('tm'); // get the RegExp for the time-pattern + if (isDefined(tm)) { + const match = this.#parseMatch(tm, per); + if (!isEmpty(match)) { + this.#result({ type: 'Period', value: per, match: 'tm', groups: cleanify(match) }); + Object.assign(groups, match); + } + } + return groups; + } + /** lookup the RegExp for a given pattern name */ + #getPattern(pat) { + const reg = this.#local.parse.pattern.get(Tempo.getSymbol(pat)); + if (isUndefined(reg)) + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Cannot find pattern: "${pat}"`); + return reg; + } + /** return a new object, with only numeric values */ + #num = (groups) => { + return ownEntries(groups) + .reduce((acc, [key, val]) => { + if (isNumeric(val)) + acc[key] = asNumber(val); + return acc; + }, {}); + }; + /** mutate the date-time by adding a duration */ + #add = (args, options = {}) => { + var _b; + const tz = options.timeZone ?? this.tz; + let zdt = this.#zdt.withTimeZone(tz); + const overrides = { + timeZone: tz, + calendar: this.#zdt.calendarId + }; + __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, "f", _Tempo_pending) ?? [...this.#local.parse.result], "f", _Tempo_pending); // collected parse-results so-far + if (isDefined(args)) { + if (isObject(args) && args.constructor === Object) { + const mutate = 'add'; + zdt = Object.entries(args ?? {}) // loop through each mutation + .reduce((zdt, [unit, offset]) => { + if (unit === 'timeZone' || unit === 'calendar') + return zdt; + const single = singular(unit); + const plural = single + 's'; + switch (`${mutate}.${single}`) { + case 'add.year': + case 'add.month': + case 'add.week': + case 'add.day': + case 'add.hour': + case 'add.minute': + case 'add.second': + case 'add.millisecond': + case 'add.microsecond': + case 'add.nanosecond': + return zdt + .add({ [plural]: offset }); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`); + return zdt; + } + }, zdt); + } + else { + return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt }); + } + } + return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt }); + }; + /** mutate the date-time by setting specific offsets */ + #set = (args, options = {}) => { + var _b; + const tz = options.timeZone ?? this.tz; + let zdt = this.#zdt.withTimeZone(tz); + const overrides = { + timeZone: tz, + calendar: this.#zdt.calendarId + }; + __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, "f", _Tempo_pending) ?? [...this.#local.parse.result], "f", _Tempo_pending); // collected parse-results so-far + if (isDefined(args)) { + if (isObject(args) && args.constructor === Object) { + if (args.timeZone) + overrides.timeZone = args.timeZone; + if (args.calendar) + overrides.calendar = args.calendar; + zdt = Object.entries(args ?? {}) // loop through each mutation + .reduce((zdt, [key, adjust]) => { + if (key === 'timeZone' || key === 'calendar') + return zdt; + const { mutate, offset, single } = ((key) => { + switch (key) { + case 'start': + case 'mid': + case 'end': + return { mutate: key, offset: 0, single: singular(adjust?.toString() ?? '') }; + default: + return { mutate: 'set', offset: adjust, single: singular(key) }; + } + })(key); // IIFE to analyze arguments + switch (`${mutate}.${single}`) { + case 'set.timeZone': + return zdt.withTimeZone(offset); + case 'set.calendar': + return zdt.withCalendar(offset); + case 'set.period': + case 'set.time': + case 'set.date': + case 'set.event': + case 'set.dow': // set day-of-week by number + case 'set.wkd': // set day-of-week by name + return this.#parse(offset, zdt); + case 'set.year': + case 'set.month': + // case 'set.week': // not defined + case 'set.day': + case 'set.hour': + case 'set.minute': + case 'set.second': + case 'set.millisecond': + case 'set.microsecond': + case 'set.nanosecond': + return zdt + .with({ [single]: offset }); + case 'set.yy': + case 'set.mm': + // case 'set.ww': // not defined + case 'set.dd': + case 'set.hh': + case 'set.mi': + case 'set.ss': + case 'set.ms': + case 'set.us': + case 'set.ns': + const value = Tempo.ELEMENT[single]; + return zdt + .with({ [value]: offset }); + case 'start.year': + return zdt + .with({ month: Tempo.MONTH.Jan, day: 1 }) + .startOfDay(); + case 'start.term': // TODO + return zdt; + case 'start.month': + return zdt + .with({ day: 1 }) + .startOfDay(); + case 'start.week': + return zdt + .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) }) + .startOfDay(); + case 'start.day': + return zdt + .startOfDay(); + case 'start.hour': + case 'start.minute': + case 'start.second': + return zdt + .round({ smallestUnit: offset, roundingMode: 'trunc' }); + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + case 'mid.year': + return zdt + .with({ month: Tempo.MONTH.Jul, day: 1 }) + .startOfDay(); + case 'mid.term': // TODO: relevant? + return zdt; + case 'mid.month': + return zdt + .with({ day: Math.trunc(zdt.daysInMonth / 2) }) + .startOfDay(); + case 'mid.week': + return zdt + .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) }) + .startOfDay(); + case 'mid.day': + return zdt + .round({ smallestUnit: 'day', roundingMode: 'trunc' }) + .add({ hours: 12 }); + case 'mid.hour': + return zdt + .round({ smallestUnit: 'hour', roundingMode: 'trunc' }) + .add({ minutes: 30 }); + case 'mid.minute': + return zdt + .round({ smallestUnit: 'minute', roundingMode: 'trunc' }) + .add({ seconds: 30 }); + case 'mid.second': + return zdt + .round({ smallestUnit: 'second', roundingMode: 'trunc' }) + .add({ milliseconds: 500 }); + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + case 'end.year': + return zdt + .add({ years: 1 }) + .with({ month: Tempo.MONTH.Jan, day: 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.term': // TODO + return zdt + .subtract({ nanoseconds: 1 }); + case 'end.month': + return zdt + .add({ months: 1 }) + .with({ day: 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.week': + return zdt + .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 }) + .startOfDay() + .subtract({ nanoseconds: 1 }); + case 'end.day': + case 'end.hour': + case 'end.minute': + case 'end.second': + return zdt + .round({ smallestUnit: offset, roundingMode: 'ceil' }) + .subtract({ nanoseconds: 1 }); + default: + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`); + return zdt; + } + }, zdt); // start reduce with the shifted zonedDateTime + } + else { + return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt }); + } + } + return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt }); + }; + #format = (fmt) => { + if (isNull(this.#tempo)) + return undefined; // don't format dates + const obj = this.#local.config.formats; + let template = (isString(fmt) && obj.has(fmt)) + ? obj[fmt] + : String(fmt); + // auto-meridiem: if {HH} is present and {mer} is absent, append it after the last time component + if (template.includes('{HH}') && !template.includes('{mer}') && !template.includes('{MER}')) { + const index = Math.max(template.lastIndexOf('{HH}'), template.lastIndexOf('{mi}'), template.lastIndexOf('{ss}')); + if (index !== -1) { + const end = template.indexOf('}', index) + 1; + template = template.slice(0, end) + '{mer}' + template.slice(end); + } + } + const result = template.replace(Match.braces, (_match, token) => { + switch (token) { + case 'wy': return pad(this.wy, 4); + case 'yyww': return pad(this.wy, 4) + pad(this.ww); + case 'yyyy': return pad(this.yy, 4); + case 'yy': return pad(this.yy % 100); + case 'mon': return this.mon; + case 'mmm': return this.mmm; + case 'mm': return pad(this.mm); + case 'dd': return pad(this.dd); + case 'day': return this.day.toString(); + case 'dow': return this.dow.toString(); + case 'wkd': return this.wkd; + case 'www': return this.www; + case 'ww': return pad(this.ww); + case 'hh': return pad(this.hh); + case 'HH': return pad(this.hh > 12 ? this.hh % 12 : this.hh || 12); + case 'mer': return this.hh >= 12 ? 'pm' : 'am'; + case 'MER': return this.hh >= 12 ? 'PM' : 'AM'; + case 'mi': return pad(this.mi); + case 'ss': return pad(this.ss); + case 'ms': return pad(this.ms, 3); + case 'us': return pad(this.us, 3); + case 'ns': return pad(this.ns, 3); + case 'ff': return `${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`; + case 'hhmiss': return `${pad(this.hh)}${pad(this.mi)}${pad(this.ss)}`; + case 'ts': return this.ts.toString(); + case 'nano': return this.nano.toString(); + case 'tz': return this.tz; + default: { + return token.startsWith('term.') + ? stringify(this.term[token.slice(5)]) + : `{${token}}`; // unknown format-code, return as-is + } + } + }); + const isExplicitlyNumeric = ['{yyyy}{ww}', '{yyyy}{mm}', '{yyyy}{mm}{dd}', '{yyww}', '{wy}{ww}', '{wy}'].includes(template); + return (isExplicitlyNumeric ? ifNumeric(result) : result); + }; + #until(arg, until = {}, since = false) { + let value, opts = {}, unit; + switch (true) { + case isString(arg) && Tempo.ELEMENT.includes(singular(arg)): + unit = arg; // e.g. tempo.until('hours') + ({ value, ...opts } = until); + break; + case isString(arg): // assume 'arg' is a dateTime string + value = arg; // e.g. tempo.until('20-May-1957', {unit: 'years'}) + if (isObject(until)) + ({ unit, ...opts } = until); + else + unit = until; // assume the 'until' arg is a 'unit' string + break; + case isObject(arg) && isString(until): // assume 'until' is a Unit + unit = until; // e.g. tempo.until({value:'20-May-1957}, 'years'}) + ({ value, ...opts } = arg); + break; + case isObject(arg) && isObject(until): // assume combination of Tempo.Options and Tempo.Until + ({ value, unit, ...opts } = Object.assign({}, arg, until)); + break; + case isString(until): + unit = until; + value = arg; + break; + case isObject(until): + unit = until.unit; + value = arg; + break; + default: + value = arg; // assume 'arg' is a DateTime + } + const offset = new this.#Tempo(value, opts); // create the offset Tempo + const diffZone = this.#zdt.timeZoneId !== offset.#zdt.timeZoneId; + // Temporal restricts cross-timezone math to absolute units ('hours') to avoid DST ambiguity + const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') }); + if (isDefined(unit)) + unit = `${singular(unit)}s`; // coerce to plural + return (isUndefined(unit) || since) // if no 'unit' provided, or if called via #since() + ? getAccessors(duration) // return an Object with all the duration accessors + .reduce((acc, dur) => Object.assign(acc, { [dur]: duration[dur] }), ifDefined({ iso: duration.toString(), unit })) + : duration.total({ relativeTo: this.#zdt, unit }); // sum-up the duration components + } + /** format the elapsed time between two Tempos (to nanosecond) */ + #since(arg, until = {}) { + const dur = this.#until(arg, until, true); // get a Tempo.Duration object + const date = [dur.years, dur.months, dur.days]; + const time = [dur.hours, dur.minutes, dur.seconds]; + const fraction = [dur.milliseconds, dur.microseconds, dur.nanoseconds] + .map(Math.abs) + .map(nbr => nbr.toString().padStart(3, '0')) + .join(''); + const rtf = new Intl.RelativeTimeFormat(this.#local.config['locale'], { style: 'narrow' }); + switch (dur.unit) { + case 'years': + return rtf.format(date[0], 'years'); + case 'months': + return rtf.format(date[1], 'months'); + case 'weeks': + return rtf.format(date[1], 'weeks'); + case 'days': + return rtf.format(date[2], 'days'); + case 'hours': + return rtf.format(time[0], 'hours'); + case 'minutes': + return rtf.format(time[1], 'minutes'); + case 'seconds': + return rtf.format(time[2], 'seconds'); + case 'milliseconds': + case 'microseconds': + case 'nanoseconds': + return `${fraction}`; + default: + return dur.iso; + } + } + static { + __runInitializers(_classThis, _classExtraInitializers); + } + }; + return Tempo = _classThis; +})(); +export { Tempo }; +// #endregion Namespace +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Tempo.init(); // initialize default global configuration +// shortcut functions to common Tempo properties / methods +/** check valid Tempo */ export const isTempo = (tempo) => isType(tempo, 'Tempo'); +/** current timestamp (ts) */ export const getStamp = ((tempo, options) => new Tempo(tempo, options).ts); +/** create new Tempo */ export const getTempo = ((tempo, options) => new Tempo(tempo, options)); +/** format a Tempo */ export const fmtTempo = ((fmt, tempo, options) => new Tempo(tempo, options).format(fmt)); +//# sourceMappingURL=tempo.class.js.map \ No newline at end of file diff --git a/packages/tempo/dist/tempo.class.js.map b/packages/tempo/dist/tempo.class.js.map new file mode 100644 index 00000000..723b9fb8 --- /dev/null +++ b/packages/tempo/dist/tempo.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tempo.class.js","sourceRoot":"","sources":["../src/tempo.class.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAC,CAAY,yCAAyC;AAEzF,4DAA4D;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AACtG,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG5M,OAAO,KAAK,KAAK,MAAM,kCAAkC,CAAC;AAC1D,OAAO,aAAa,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAEtH,OAAO,mCAAmC,CAAC,CAAS,mBAAmB;AAUvE,0BAA0B;AAE1B,iDAAiD,CAAM,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClG,+BAA+B,CAAe,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAE3E,6BAA6B;AAE7B;;;;GAIG;IAGU,KAAK;;4BAFjB,YAAY,EACZ,SAAS;;;;;;;;;YACV,6KA6xDC;;;;QA5xDD,0DAA0D;QACzD,iCAAiC,CAAa,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,CAAC,OAAO,CAAA,CAAC,CAAC;QAC3F,gCAAgC,CAAa,MAAM,KAAK,QAAQ,KAAK,OAAO,KAAK,CAAC,QAAQ,CAAA,CAAC,CAAC;QAC5F,+BAA+B,CAAc,MAAM,KAAK,KAAK,KAAK,OAAO,KAAK,CAAC,KAAK,CAAA,CAAC,CAAC;QACtF,8BAA8B,CAAc,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC,MAAM,CAAA,CAAC,CAAC;QACvF,2CAA2C,CAAQ,MAAM,KAAK,QAAQ,KAAK,OAAO,KAAK,CAAC,QAAQ,CAAA,CAAC,CAAC;QAClG,8CAA8C,CAAM,MAAM,KAAK,SAAS,KAAK,OAAO,KAAK,CAAC,SAAS,CAAA,CAAC,CAAC;QAErG,wBAAwB,CAAiB,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC,MAAM,CAAA,CAAC,CAAC;QACpF,8BAA8B,CAAc,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,CAAC,OAAO,CAAA,CAAC,CAAC;QAEzF,2CAA2C,CAAQ,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,CAAC,OAAO,CAAA,CAAC,CAAC;QAChG,mDAAmD,CAAI,MAAM,KAAK,MAAM,KAAK,OAAO,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,OAAO,CAAA,CAAC,CAAC;QAClH,wBAAwB,CAAiB,MAAM,KAAK,KAAK,KAAK,OAAO,KAAK,CAAC,KAAK,CAAA,CAAC,CAAC;;YAElF,aAAa;YAEb,0DAA0D;YACnD,sBAAO,IAAI,MAAM,CAAC,OAAO,EAAE;oBACjC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK;oBAC9B,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK;iBAC9B,CAAC,EAHS,CAGT;;;YAEF,+CAA+C,CAAa,yBAAU,EAAiB,EAApB,CAAoB;;;YACvF,yCAAyC,CAAgB,kCAAQ,CAA4B;;;YAC7F,+CAA+C,CAAa,2BAAY,CAAC,EAAJ,CAAK;;;YAC1E,8CAA8C,CAAa,wBAAS,EAAwB,EAA3B,CAA4B;;;YA0F7F,4EAA4E;YACrE,4BAAa,CAAC,KAAkB,EAAE,OAAsB,EAAE,EAAE;oBAClE,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,OAAO,EAAE,QAAQ,CAAC;wBACzE,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAc,qDAAqD;oBAE/F,4EAA4E;oBAC5E,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,QAAkB,CAAC,CAAC;oBACvH,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC;oBAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC;oBAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAY,iDAAiD;oBAE9F,QAAQ,GAAG,EAAE,CAAC;wBACb,KAAK,CAAC,CAAC;4BACN,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAa,8CAA8C;wBACvF,KAAK,CAAC;4BACL,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAa,6CAA6C;wBACtF,KAAK,CAAC,CAAC;wBACP;4BACC,OAAO,KAAK,CAAC,CAAC,CAAmB,gCAAgC;oBACnE,CAAC;gBACF,CAAC,EAnBgB,CAmBhB;;;YA6CD,2CAA2C;YACpC,yBAAU,CAAwC,GAAM,EAAE,EAAE,CAClE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAM,EADjC,CACkC;;;YAEhD,oDAAoD;YAC7C,yBAAU,CAAC,MAAe,EAAE,EAAE;oBACpC,IAAI,QAA4B,CAAC;oBAEjC,IAAI,CAAC,CAA0B,gBAAgB;wBAC9C,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnE,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAmB,uBAAuB;oBAE7D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;oBAE9B,OAAO,QAAQ;wBACd,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAY,kDAAkD;wBAC/F,MAAM,EAAE,SAAS,EAAE,QAAQ,IAAe,0BAA0B;wBACpE,OAAO,CAAC,MAAM,IAAsB,sBAAsB;wBAC1D,MAAM,CAAA,CAAwB,0BAA0B;gBAC1D,CAAC,EAda,CAcb;;QAiLD,oCAAoC;QAEpC,0DAA0D;QAE1D;;;;;;;;WAQG;QACH,MAAM,CAAC,QAAQ,CAAC,MAAuB;YACrC,UAAkB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;YACrC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED;;;;;;;;;;WAUG;QACH,MAAM,CAAC,IAAI,CAAC,UAAyB,EAAE;YACtC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAiB,oCAAoC;gBAC3E,uBAAA,KAAK,iCAAQ,CAAC,KAAK,GAAG;oBACrB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;oBACnC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;oBACjC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;oBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;oBACjC,UAAU,EAAE,uBAAA,KAAK,qCAAY,MAAjB,KAAK,EAAa,OAAO,CAAC,UAAyC,CAAC;oBAChF,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAyC,CAAiB;oBACtF,KAAK,EAAE,OAAO,CAAC,KAAK;iBACL,CAAC;gBAEjB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC;gBACvE,uBAAA,KAAK,iCAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EACtC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAK,0CAA0C;gBAC1F;oBACC,QAAQ;oBACR,QAAQ;oBACR,MAAM,EAAE,uBAAA,KAAK,iCAAQ,MAAb,KAAK,CAAU;oBACvB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAW;oBAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;oBACpC,KAAK,EAAE,QAAQ;iBACf,CACe,CAAC;gBAElB,uBAAA,KAAK,cAAa,CAAC,uBAAA,CAAC,CAAiB,yBAAyB;gBAC9D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAU,8BAA8B;oBAC3E,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAc,mCAAmC;wBAC1E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEpB,KAAK,CAAC,OAAO,CAAC,GAAI,aAAuB,CAAC,CAAC,CAAW,iCAAiC;gBAEvF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAW,CAAC;gBACjD,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,uBAAA,KAAK,iCAAQ,EAC7B,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EACzD,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAc,wCAAwC;gBAC/E,uBAAA,KAAK,uCAAc,MAAnB,KAAK,EAAe,uBAAA,KAAK,iCAAQ,EAAE,MAAM,CAAC,CAC1C,CAAA;YACF,CAAC;iBACI,CAAC;gBACL,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC/F,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,uBAAA,KAAK,iCAAQ,EAAE,uBAAA,KAAK,uCAAc,MAAnB,KAAK,EAAe,uBAAA,KAAK,iCAAQ,EAAE,SAAmB,CAAC,EAAE,OAAO,CAAC,CAAC;YACnG,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI;gBAC7D,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,CAAC;YAE/D,OAAO,KAAK,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,0DAA0D;QAC1D,MAAM,CAAC,uCAxa4D,GAAW,IAAI,OAAO,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,yCAC9C,GAAW,EAAE,GAAW,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA,CAAC,CAAC,2CAC3D,KAAkB,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,CAAA,CAAC,CAAC,yCACjD,GAAW,EAAE,IAAY,IAAO,OAAO,MAAM,CAAC,MAAM,CAAC,uBAAA,KAAK,gCAAO,MAAZ,KAAK,EAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA,CAAC,CAAC,+CAOjJ,KAAkB;YACnC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC;gBAC7G,OAAO,CAAwB,yBAAyB;YAEzD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAK,sBAAsB;YAC1E,MAAM,MAAM,GAAG,MAAM;iBACnB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,iCAAiC;iBACtF,IAAI,CAAC,GAAG,CAAC,CAAA,CAAsB,0CAA0C;YAE3E,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,uBAAA,KAAK,gCAAO,MAAZ,KAAK,EAAQ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;gBACtE,IAAI,CAAC,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACnD,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;wBAClE,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBAE7D,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE;wBACrD,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC;wBACzB,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,IAAI;wBACd,YAAY,EAAE,IAAI;qBAClB,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAED,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,uBAAA,KAAK,gCAAO,MAAZ,KAAK,EAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAW,CAAC;gBACrE,MAAM,OAAO,GAAG,2CAA2C,CAAC;gBAC5D,IAAI,CAAC,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;oBACnD,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;wBACjE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;oBAE3D,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;wBACnD,KAAK,EAAE,OAAO;wBACd,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,IAAI;wBACd,YAAY,EAAE,IAAI;qBAClB,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC,iDAOkB,KAAkB;YACpC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACrD,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;gBACjE,OAAO,CAAwB,yBAAyB;YAEzD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAK,sBAAsB;YAC1E,MAAM,MAAM,GAAG,OAAO;iBACpB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,4CAA4C;iBACjG,IAAI,CAAC,GAAG,CAAC,CAAA,CAAsB,2CAA2C;YAE5E,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,uBAAA,KAAK,gCAAO,MAAZ,KAAK,EAAQ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;gBACtE,IAAI,CAAC,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACnD,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;wBAClE,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBAE7D,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE;wBACrD,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC;wBACzB,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,IAAI;wBACd,YAAY,EAAE,IAAI;qBAClB,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC,iDAyBkB,KAAkB;YACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAE9D,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC;gBACpE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAO,iDAAiD;YAElG,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC1B,MAAM,GAAG,GAAI,GAAW,CAAC,SAAS,IAAK,GAAW,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC1E,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAkB,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACJ,CAAC,iDAMkB,KAAkB;YACpC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAK,+BAA+B;YACnF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAU,qBAAqB;YACnE,IAAI,GAAG,GAAG,KAAK,CAAC,CAAoB,mCAAmC;YAEvE,IAAI;iBACF,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;gBACvB,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAE,GAAc,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,uCAAuC;gBACvH,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAE,GAAc,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,uCAAuC;gBAEvH,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;oBAC7B,OAAO,CAAsB,kBAAkB;gBAEhD,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAE,mEAAmE;gBAC3H,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAE,sEAAsE;gBAE/H,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,CAAgB,uDAAuD;oBAC3F,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBAChE,GAAG,GAAG,IAAI,CAAC;gBACZ,CAAC;YACF,CAAC,CAAC,CAAA;YAEH,IAAI,GAAG;gBACN,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAW,CAAC,CAAG,oCAAoC;QACpG,CAAC,+CA2BiB,KAAkB,EAAE,GAAG,OAAwB;YAEhE,MAAM,aAAa,GAAkB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC;YACnE,IAAI,OAAO,CAAC,aAAa,CAAC,EAAgB,gBAAgB;gBACzD,OAAO;YAER,IAAI,aAAa,CAAC,KAAK,EAAiB,0BAA0B;gBACjE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC;YAE7F,wEAAwE;YACxE,MAAM,OAAO,GAAG,CAAC,MAAqB,EAAE,KAAU,EAAE,OAAwB,EAAE,EAAE;gBAC/E,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,MAAM,KAAK,EAAE,CAAA;gBAEb,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;oBAClB,KAAK,QAAQ;wBACZ,UAAU,CAAC,GAAG,CAAC,KAAsB,CAAC;6BACpC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAW,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;wBACzE,MAAM;oBACP,KAAK,QAAQ,CAAC;oBACd,KAAK,QAAQ;wBACZ,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/C,MAAM;oBACP,KAAK,OAAO;wBACX,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;wBACxD,MAAM;gBACR,CAAC;YACF,CAAC,CAAA;YAED,UAAU,CAAC,aAAa,CAAC;iBACvB,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;gBAC7B,IAAI,WAAW,CAAC,MAAM,CAAC;oBAAE,OAAO,CAAU,wBAAwB;gBAClE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE3B,QAAQ,MAAM,EAAE,CAAC;oBAChB,KAAK,SAAS,CAAC;oBACf,KAAK,QAAQ,CAAC;oBACd,KAAK,OAAO,CAAC;oBACb,KAAK,QAAQ;wBACZ,sFAAsF;wBACtF,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;4BACtC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;wBAE1D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBACjC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;4BAC5C,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAC5B,MAAM,KAAK,SAAS;gCACnB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;gCACjC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC7B,CAAA;wBACF,CAAC;6BAAM,CAAC;4BACP,OAAO,CAAC,GAAG,CAAC,KAAuB,CAAC;iCAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAE,IAA4B,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;wBACpG,CAAC;wBACD,MAAM;oBAEP,KAAK,YAAY;wBAChB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,uBAAA,KAAK,qCAAY,MAAjB,KAAK,EAAa,GAAG,CAAC,KAAkD,CAAC,CAAC;wBAChG,MAAM;oBAEP,KAAK,YAAY,EAAiB,wDAAwD;wBACzF,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAkD,CAAC,CAAC;wBACtF,MAAM;oBAEP,KAAK,OAAO;wBACX,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACzC,MAAM;oBAEP,KAAK,QAAQ;wBACZ,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,KAAK,EAAE,GAAG,CAAC,KAAsB,CAAC,CAAC;wBACpD,MAAM;oBAEP,KAAK,UAAU;wBACd,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;wBAC7C,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;wBACpD,MAAM;oBAEP,KAAK,SAAS;wBACb,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;4BACnE,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAiB,CAAC,CAAC,0BAA0B;wBAEnG,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;4BACtB,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAsB,CAAiB,CAAC;wBAChG,MAAM;oBAEP,KAAK,WAAW;wBACf,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAW,CAAC,CAAC,CAAC,MAAM,CAAC;wBACrF,MAAM;oBAEP,KAAK,SAAS;wBACb,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC7C,MAAM;oBAEP,KAAK,QAAQ;wBACZ,MAAM,CAAqB,8CAA8C;oBAE1E,SAA6B,0BAA0B;wBACtD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;wBAClD,MAAM;gBACR,CAAC;YACF,CAAC,CAAC,CAAA;YAEH,MAAM,UAAU,GAAG,uBAAA,KAAK,qCAAY,MAAjB,KAAK,EAAa,KAAK,CAAC,CAAC;YAC5C,IAAI,UAAU,KAAK,uBAAA,KAAK,gCAAO,MAAZ,KAAK,EAAQ,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,EAAC,6DAA6D;gBACpH,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;YAErC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,KAAK,EAAE,aAAa,CAAC,CAAC;YAE7D,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;gBAAE,uBAAA,KAAK,qCAAY,MAAjB,KAAK,EAAa,KAAK,CAAC,CAAC;YAChE,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,KAAK,CAAC,CAAC;YAC1D,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE,uBAAA,KAAK,qCAAY,MAAjB,KAAK,EAAa,KAAK,CAAC,CAAC;YAE5D,uBAAA,KAAK,sCAAa,MAAlB,KAAK,EAAc,KAAK,CAAC,CAAC,CAAe,gCAAgC;QAC1E,CAAC,iDAMkB,KAAkC;YACpD,OAAO,OAAO,CAAC,KAAK,CAAC;iBACnB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBAChC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAG,GAAW,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QACzF,CAAC,qDAGoB,KAAkB,EAAE,MAAuB,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM;YAC/F,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAClD,MAAM,SAAS,GAAI,UAAkB,CAAC,GAAG,CAAoB,CAAC;YAC9D,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,EAAE,CAAA;YAEnC,2DAA2D;YAC3D,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,EAAE,CAAA;YAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;gBACnD,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;YAErC,mBAAmB;YACnB,IAAI,SAAS,CAAC,KAAK;gBAClB,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,KAAY,CAAC,CAAC,CAAC;YAEnD,qBAAqB;YACrB,IAAI,SAAS,CAAC,OAAO;gBACpB,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAiB,CAAC;YAEvF,qBAAqB;YACrB,IAAI,SAAS,CAAC,OAAO;gBACpB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzD,qBAAqB;YACrB,IAAI,IAAI,GAAG,SAAS,CAAC,OAAO,IAAI,EAAE,CAAA;YAClC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACzC,CAAC,mDAGmB,KAAkB;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;YAEpC,wFAAwF;YACxF,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAC3G,OAAO;YAER,yDAAyD;YACzD,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;gBACzC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;YAEjC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAc,sBAAsB;YAEhE,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;gBAC/D,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC,EAkFO,MAAM,CAAC,OAAO,EAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAA,CAAC,CAAC;QAE1C;;;WAGG;QACH,MAAM,CAAC,MAAM,CAAC,MAAoB,EAAE,OAAa;YAChD,MAAM,CAAC,GAAG,MAA+B,CAAC;YAE1C,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBAClB,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;YACpB,CAAC;YAED,OAAO,IAAI,CAAC;QACb,CAAC;QAED,kEAAkE;QAClE,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,KAAK;YAChD,OAAO,UAAU,CAAgB,GAAG,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QAmBD,oDAAoD;QACpD,MAAM,CAAC,UAAU,CAAC,MAAsB,EAAE,GAAG,GAAG,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,KAAK;YACzE,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,0DAA0D;QAC1D,MAAM,CAAC,SAAS,CAAC,GAAqB;;YACrC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,OAAO,+CAAA,CAAE,iEAAe,EAAjB,IAAiB,CAAA,uBAAA,EAAE,CAAC,CAAQ,iCAAiC;gBAChF,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAW,yBAAyB;YACrE,CAAC;YAED,IAAI,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,GAAG,CAAC;YAE9B,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC,CAAM,kCAAkC;gBAClF,OAAO,KAAK,CAAC,GAAyB,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,KAAK,CAAC,GAAyB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,qEAAqE;QACrE,MAAM,CAAC,MAAM,CAAC,MAAuB,EAAE,OAAiB;YACvD,mFAAmF;YACnF,SAAS,OAAO,CAAC,GAAoB,EAAE,KAAK,GAAG,CAAC;gBAC/C,IAAI,KAAK,GAAG,EAAE;oBAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAG,cAAc;gBAEzE,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;gBAE9C,IAAI,YAAY,CAAC,MAAM,CAAC,EAAgB,kCAAkC;oBACzE,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,kCAAkC;gBACrF,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACjD,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,4CAA4C;gBAE/F,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oBACnD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAQ,iCAAiC;oBAC7E,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,KAAY,CAAC,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC,IAAW,CAAC,EAAE,MAAM,CAAC;oBAClF,MAAM,OAAO,GAAG,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAY,CAAC,EAAE,MAAM,IAAI,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAW,CAAC,EAAE,MAAM,CAAC;oBACtH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAY,CAAC,CAAC,CAAS,iCAAiC;oBAE9E,IAAI,GAAG,GAAG,OAAO,IAAI,OAAO,IAAI,MAAM,CAAC,CAAM,gCAAgC;oBAE7E,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAI,uCAAuC;wBACrF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAQ,0BAA0B;wBACpE,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBACvC,GAAG,GAAG,OAAO,EAAE,CAAC,MAAa,CAAC,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC,MAAa,CAAC,EAAE,MAAM;+BACtE,OAAO,CAAC,MAAa,CAAC,EAAE,MAAM,IAAI,OAAO,CAAC,MAAa,CAAC,EAAE,MAAM;+BAChE,MAAM,CAAC,MAAa,CAAC,CAAC;oBAC3B,CAAC;oBAED,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAU,4CAA4C;wBACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC1C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,QAAQ,GAAG,CAAC;4BACrC,GAAG,GAAG,MAAM,QAAQ,IAAI,GAAG,GAAG,CAAC;oBACjC,CAAC;oBAED,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,KAAK,CAAC,CAAM,0BAA0B;wBACvE,CAAC,CAAC,KAAK,CAAsB,4BAA4B;wBACzD,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAgB,8DAA8D;gBAC1G,CAAC,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAgB,4BAA4B;YAErE,OAAO,IAAI,MAAM,CAAC,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,CAAQ,oCAAoC;QACrF,CAAC;QAED,0DAA0D;QAC1D,MAAM,CAAC,OAAO,CAAC,MAAuC,EAAE,MAAuC;YAC9F,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAwB,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,MAAwB,CAAC,CAAC;YAE3F,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACpE,CAAC;QAED,iCAAiC;QACjC,MAAM,KAAK,MAAM;YAChB,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,uBAAA,KAAK,iCAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,qCAAqC;QACrC,MAAM,KAAK,SAAS;YACnB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9C,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAI,UAAkB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QACrF,CAAC;QAED;;;OAGE;QACF,MAAM,KAAK,OAAO;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAW,CAAC;YAEpE,OAAO;gBACN,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC3G,MAAM,EAAE,IAAI,CAAC,MAAM;aACnB,CAAA;QACF,CAAC;QAKD,MAAM,CAAC,IAAI,CAAC,KAAsC,EAAE,OAAuB,IAAI,OAAO,IAAI,IAAI,CAAC,KAAoC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAEhJ,MAAM,CAAC,GAAG,KAAK,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAIhE,gCAAgC;QAChC,MAAM,KAAK,KAAK;YACf,OAAO,MAAM,CAAC,uBAAA,KAAK,gCAAO;iBACxB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAS,2BAA2B;QAC3E,CAAC;QAED,mFAAmF;QACnF,MAAM,CAAC,OAAO,CAAC,GAAG,MAA0B;YAC3C,OAAO,CAAC,MAAM,CAAC;iBACb,IAAI,CAAC,CAAC,CAAC;iBACP,OAAO,CAAC,CAAC,CAAC,EAAE;gBACZ,IAAI,CAAC,uBAAA,KAAK,gCAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,EAAK,0BAA0B;oBAC1E,uBAAA,KAAK,gCAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAe,qCAAqC;YAC3E,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,qCAAqC;QACrC,MAAM,KAAK,UAAU;YACpB,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;iBAC/B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAM,6BAA6B;QAChF,CAAC;QAGD,qCAAqC;QACrC,MAAM,KAAK,OAAO;YACjB,OAAO,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrE,CAAC;QAED;;WAEG;QACH,MAAM,KAAK,KAAK;YACf,MAAM,KAAK,GAAG,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC;YAClC,OAAO,MAAM,CAAC;gBACb,GAAG,KAAK,EAAwB,iCAAiC;gBACjE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,EAAa,wBAAwB;gBAClE,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;gBAC3B,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;gBACzB,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;gBAC3B,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;gBACjC,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;aACjC,CAAgB,CAAC;QACnB,CAAC;QAED,oCAAoC;QACpC,MAAM,CAAC,2DA3KiB,KAAuE;YAC9F,MAAM,MAAM,GAAiB,EAAE,CAAA;YAC/B,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;gBACrB,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC5D,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC7D,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;gBACrB,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC5D,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC9D,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC9D,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC,EA6JO,MAAM,CAAC,QAAQ,EAAC;YACvB,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAO,0CAA0C;QAC7F,CAAC;QAED,mCAAmC;QAEnC,0DAA0D;QAE1D,kEAAkE;QAClE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAsC;YAC1D,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC7D,QAAQ,IAAI,EAAE,CAAC;gBACd,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAQ,kBAAkB;gBAChE,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAS,4BAA4B;gBACzE,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAc,2BAA2B;YACpE,CAAC;QACF,CAAC;QAED,oCAAoC;QACpC,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChB,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAI,+CAA+C;QACpG,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACvB,OAAO,OAAO,CAAC,CAAqB,4CAA4C;QACjF,CAAC;QAED,8BAA8B;QAE9B,0DAA0D;QAE1D,wBAAwB,CAAiB,MAAM,CAAkB;QACjE,0BAA0B,CAAgB,QAAQ,GAAG,EAAmB,CAAC;QACzE,qCAAqC,CAAW,IAAI,CAAmB;QACvE,wCAAwC,CAAS,IAAI,CAA0B;QAC/E,2CAA2C,CAAQ,OAAO,CAAsC;QAChG,wCAAwC,CAAS,IAAI,GAAG,EAAmB,CAAC;QAC5E,4BAA4B,CAAe,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAgB,CAAC;QACtF,kDAAkD,CAAI,MAAM,GAAG;YAC9D,6BAA6B,CAAe,MAAM,EAAE,EAAkB;YACtE,wDAAwD,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAmB,EAAiB;SAC/F,CAAC;QAajB,YAAY,KAAsC,EAAE,UAAyB,EAAE;YAC9E,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAW,wBAAwB;YACtE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA,0DAA0D;YACpH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAa,wEAAwE;YAEnH,8DAA8D;YAC9D,IAAI,CAAC;gBACJ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAwB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,wCAAwC;gBAE/G,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAQ,CAAC,EAAE,CAAC;oBAC5E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;wBAClD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAmB,CAAC,EAAE,CAAC,CAAC;gBACxE,CAAC;gBAED,uBAAA,KAAK,gCAAO,CAAqB,oEAAoE;qBACnG,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;oBACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAM,gDAAgD;oBAC7F,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAI,4CAA4C;gBAC3F,CAAC,CAAC,CAAA;gBAEH,IAAI,SAAS,CAAC,uBAAA,KAAK,kCAAS,CAAC,EAAE,CAAC,CAAW,iCAAiC;oBAC3E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,uBAAA,KAAK,kCAAS,CAAC,CAAC,CAAA,kCAAkC;oBACtF,uBAAA,KAAK,cAAY,KAAK,CAAC,sBAAA,CAAC,CAAc,0BAA0B;gBACjE,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAkB,oBAAoB;gBACxD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAkB,yCAAyC;gBAC9E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;gBAC/C,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAyB,GAAa,CAAC,OAAO,KAAM,GAAa,CAAC,KAAK,EAAE,CAAC,CAAC;gBACzG,OAAO,EAAW,CAAC,CAAkB,sBAAsB;YAC5D,CAAC;QACF,CAAC;QAED,sIAAsI;QACtI,iEAAiE;QACjE,QAAQ,CAAC,IAAW,EAAE,IAA6B,EAAE,MAA2C,EAAE,SAAkB;YACnH,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;oBACvC,YAAY,EAAE,KAAK;oBACnB,UAAU,EAAE,KAAK;oBACjB,GAAG,EAAE;wBACJ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAI,iCAAiC;wBAChF,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;4BAC7C,CAAC,IAAI,CAAC,EAAE;gCACP,KAAK;gCACL,YAAY,EAAE,KAAK;gCACnB,QAAQ,EAAE,KAAK;gCACf,UAAU,EAAE,IAAI;6BAChB;yBACD,CAAC,CAAC,CAAA;wBACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC;iBACD,CAAC,CAAA;YACH,CAAC;QACF,CAAC;QAED,yBAAyB;QAEzB,0DAA0D;QAC1D,gCAAgC,CAAa,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAA,CAAC,CAAC;QACvF,sCAAsC,CAAU,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC;QACvM,kCAAkC,CAAY,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,KAAiB,CAAA,CAAC,CAAC;QACrG,kCAAkC,CAAY,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,UAAsB,CAAA,CAAC,CAAC;QAC1G,8BAA8B,CAAc,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAA,CAAC,CAAC;QACrF,wCAAwC,CAAS,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAA,CAAC,CAAC;QAC3F,6BAA6B,CAAe,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAgB,CAAA,CAAC,CAAC;QAClG,iCAAiC,CAAa,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAkB,CAAA,CAAC,CAAC;QACtG,mCAAmC,CAAY,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAkB,CAAA,CAAC,CAAC;QACvG,yCAAyC,CAAS,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAuB,CAAA,CAAC,CAAC;QAC/G,8CAA8C,CAAM,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAuB,CAAA,CAAC,CAAC;QACjH,6CAA6C,CAAO,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,UAAsB,CAAA,CAAC,CAAC;QAChH,6CAA6C,CAAO,IAAI,EAAE,KAAK,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC;QACrI,mDAAmD,CAAI,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,CAAA,CAAC,CAAC;QACvG,gDAAgD,CAAK,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC;QACjH,qCAAqC,CAAW,IAAI,GAAG,KAAK,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAoB,CAAC,CAAA,CAAC,CAAC;QACtH,wCAAwC,CAAS,IAAI,GAAG,KAAK,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAoB,CAAC,CAAA,CAAC,CAAC;QACxH,uCAAuC,CAAU,IAAI,GAAG,KAAK,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAA0B,CAAC,CAAA,CAAC,CAAC;QAC/H,yCAAyC,CAAS,IAAI,GAAG,KAAK,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,SAA0B,CAAC,CAAA,CAAC,CAAC;QACzI,uCAAuC,CAAU,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,SAA0B,CAAA,CAAC,CAAC;QAClH,4CAA4C,CAAO,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAA,CAAC,CAAC;QAC3G,kCAAkC;QAClC,IAAI,MAAM;YACT,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,yDAAyD,CAAC,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA,CAAC,CAAC;QAClG,sDAAsD,CAAE,IAAI,IAAI,KAAK,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;QAClG,yDAAyD,CAAC,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAA,CAAC,CAAC;QACxF,wBAAwB,CAAiB,IAAI,KAAK;YACjD,OAAO,MAAM,CAAC;gBACb,0BAA0B,CAAc,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBACnG,+BAA+B,CAAY,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB;gBAClF,+BAA+B,CAAY,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzG,8BAA8B,CAAY,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,gBAAgB;aAChF,CAAC,CAAA;QACH,CAAC;QACD,uCAAuC;QACvC,qCAAqC;QAErC;;;;;WAKG;QACH,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,WAA2B,CAAC,CAAC,CAAC;QAQzD,4CAA4C,CAAO,KAAK,CAAC,UAAyD,EAAE,WAAyC,IAA6B,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA,CAAC,CAAC;QAKvO,2CAA2C,CAAQ,KAAK,CAAC,UAAyD,EAAE,WAAyC,IAAY,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA,CAAC,CAAC;QAEtN,4DAA4D,CAAC,MAAM,CAAyB,GAAM,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC;QAChI,0DAA0D,CAAA,GAAG,CAAC,KAAsC,EAAE,OAAuB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3K,mDAAmD,CAAI,GAAG,CAAC,KAAsC,EAAE,OAAuB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACxK,uDAAuD,CAAE,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA,CAAC,CAAC;QAE9G,oDAAoD,CAAG,UAAU,KAAK,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC;QACrK,kDAAkD,CAAI,WAAW,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAA,CAAC,CAAC;QAC9G,kDAAkD,CAAI,WAAW,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAA,CAAC,CAAC;QAC9G,sDAAsD,CAAE,eAAe,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,eAAe,EAAE,CAAA,CAAC,CAAC;QACxH,8CAA8C,CAAM,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,CAAA,CAAC,CAAC;QAExG,iDAAiD,CAAK,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAA,CAAC,CAAC;QACjK,0DAA0D,CAAA,QAAQ,KAAK,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAA,CAAC,CAAC;QAC1I,sDAAsD,CAAE,MAAM,KAAK,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC;QACrJ,mDAAmD,CAAI,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC;QAE1F,qCAAqC;QAErC,0DAA0D;QAE1D,0EAA0E;QAC1E,SAAS,CAAC,OAAsB;YAC/B,yDAAyD;YACzD,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAEtD,6DAA6D;YAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YAE9B,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAS,oBAAoB;QACrE,CAAC;QAED,2BAA2B;QAC3B,MAAM,CAAC,KAAsB,EAAE,QAAiC;YAC/D,MAAM,KAAK,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;iBACnF,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YAEzE,qFAAqF;YACrF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAClD,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,QAAgB,CAAC,EAAE,IAAK,QAAgB,CAAC,UAAU,CAAC;YAChG,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,QAAgB,CAAC,EAAE,IAAK,QAAgB,CAAC,UAAU,CAAC;YAEjG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,uBAAA,KAAK,kCAAS,CAAC,EAAG,qCAAqC;gBAC3G,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9C,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,GAAG,CAAC,CAAC,CAAC,0BAA0B;YAE5G,QAAQ,IAAI,EAAE,CAAC;gBACd,KAAK,MAAM,CAAC;gBACZ,KAAK,MAAM,CAAC;gBACZ,KAAK,OAAO,CAAC;gBACb,KAAK,WAAW;oBACf,OAAO,KAAK,CAAC;gBAEd,KAAK,QAAQ,EAAqB,iDAAiD;oBAClF,IAAI,CAAC;wBACJ,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAY,qCAAqC;wBACrF,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;wBACnF,IAAI,IAAI,CAAC,MAAM;4BAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC;wBAC9D,OAAO,GAAG,CAAC;oBACZ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC,CAAsB,yCAAyC;wBAC7E,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;wBACjE,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,gDAAgD,CAAC,CAAC;wBAEtF,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC5B,IAAI,CAAC;gCACJ,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;4BAC7E,CAAC;4BAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;wBACtC,CAAC;wBAED,IAAI,CAAC;4BACJ,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;wBACjF,CAAC;wBAAC,MAAM,CAAC,CAAC,uCAAuC,CAAC,CAAC;wBAEnD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;wBACxC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;4BACxB,OAAO,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,KAAK,GAAG,CAAC,CAAC;wBAE9E,OAAO,QAAQ,CAAC,aAAa,CAAW,0BAA0B;6BAChE,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;6BACrD,YAAY,CAAC,GAAG,CAAC,CAAA;oBACpB,CAAC;gBAEF,KAAK,wBAAwB,EAAa,qDAAqD;oBAC9F,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC;wBAC3D,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAE7C,KAAK,oBAAoB,CAAC;gBAC1B,KAAK,wBAAwB;oBAC5B,OAAO,KAAK;yBACV,eAAe,CAAC,EAAE,CAAC;yBACnB,YAAY,CAAC,GAAG,CAAC,CAAC;gBAErB,KAAK,oBAAoB;oBACxB,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAEnC,KAAK,yBAAyB,EAAa,wCAAwC;oBAClF,OAAO,KAAK;yBACV,WAAW,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;yBAC5D,eAAe,CAAC,EAAE,CAAC;yBACnB,YAAY,CAAC,GAAG,CAAC,CAAA;gBAEpB,KAAK,wBAAwB,EAAa,sBAAsB;oBAC/D,OAAO,KAAK;yBACV,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;yBACjC,eAAe,CAAC,EAAE,CAAC;yBACnB,YAAY,CAAC,GAAG,CAAC,CAAA;gBAEpB,KAAK,kBAAkB;oBACtB,OAAO,KAAK;yBACV,kBAAkB,CAAC,EAAE,CAAC;yBACtB,YAAY,CAAC,GAAG,CAAC,CAAA;gBAEpB,KAAK,OAAO;oBACX,OAAO,KAAK;yBACV,UAAU,EAAE;yBACZ,YAAY,CAAC,EAAE,CAAC;yBAChB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAgB,0CAA0C;gBAE/E,KAAK,MAAM;oBACV,OAAO,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;yBAC5D,kBAAkB,CAAC,EAAE,CAAC;yBACtB,YAAY,CAAC,GAAG,CAAC,CAAC;gBAErB,KAAK,QAAQ,EAAqB,iDAAiD;oBAClF,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC1F,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAEtE,OAAO,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;yBAClF,kBAAkB,CAAC,EAAE,CAAC;yBACtB,YAAY,CAAC,GAAG,CAAC,CAAC;gBAErB,KAAK,QAAQ,EAAqB,kDAAkD;oBACnF,OAAO,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC;yBACjD,kBAAkB,CAAC,EAAE,CAAC;yBACtB,YAAY,CAAC,GAAG,CAAC,CAAC;gBAErB;oBACC,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,oCAAoC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACnG,OAAO,KAAK,CAAC;YACf,CAAC;QACF,CAAC;QAED,6CAA6C;QAC7C,KAAK,CAAC,KAAsC,EAAE,UAAyB,EAAE;YACxE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC5B,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC;gBAC7B,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC5B,CAAC;QAED,uDAAuD;QACvD,UAAU,CAAC,GAAQ;YAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM;gBAAE,OAAO,KAAK,CAAC;YAE/D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAe,6EAA6E;YACtH,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5C,OAAO,KAAK,CAAC;YAEd,OAAO,IAAI;iBACT,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,2DAA2D;QAC3D,oBAAoB,CAAC,KAAiD;YACrE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC;gBACrC,OAAO,KAAK,CAAC;YAEd,8DAA8D;YAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,OAAO,CAAC;gBAC7D,OAAO,KAAK,CAAC;YAEd,kDAAkD;YAClD,OAAO,IAAI;iBACT,MAAM,CAAC,QAAQ,CAAC;iBAChB,KAAK,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QACzD,CAAC;QAED,OAAO,CAAC,GAAG,IAA4B;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAgB,CAAC,CAAA,+BAA+B;YAEvF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;oBAC/C,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;gBACzB,CAAC,uBAAA,KAAK,kCAAS,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC;QAED,8DAA8D;QAC9D,QAAQ,CAAC,KAAiC,EAAE,QAAgC,EAAE,UAAU,GAAG,KAAK;YAC/F,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;YAE5B,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAS,kEAAkE;gBACjH,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,KAAY,CAAC;gBAC/D,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;oBAC1B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;oBAC/B,CAAC,CAAC,QAAQ,CAAC;gBAEZ,IAAI,QAAQ;oBACX,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAU,0BAA0B;gBACtE,IAAI,QAAQ;oBACX,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAU,0BAA0B;gBAEtE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;gBAEtG,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;oBACzB,IAAI,EAAE,wBAAwB,EAAY,sBAAsB;oBAChE,KAAK,EAAE,GAAG;iBACV,CAAC,CAAA;YACH,CAAC;YAED,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnC,OAAO,GAAG,CAAC;YACZ,CAAC;YAED,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAI,KAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAE5B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAgB,8BAA8B;gBACrE,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAiB,6BAA6B;oBACjE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;oBACtC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC9C,CAAC;gBACD,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAc,6CAA6C;oBACpF,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACvC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvE,CAAC;YACF,CAAC;iBACI,CAAC,CAAyB,sBAAsB;gBACpD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAoB,mFAAmF;oBAC7H,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,4EAA4E,CAAC,CAAC;oBACnH,OAAO,GAAG,CAAC;gBACZ,CAAC;YACF,CAAC;YAED,6GAA6G;YAE7G,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;YACtC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAM,iCAAiC;gBAClF,IAAI,OAAO,CAAC,MAAM,CAAC;oBAAE,SAAS,CAAY,mCAAmC;gBAE7E,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,kDAAkD;gBAE3H,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAK,8CAA8C;gBAChG,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAI,uDAAuD;gBAE1G,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAG,mDAAmD;gBACtG,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAK,yDAAyD;gBAC3G,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAK,yDAAyD;gBAE3G;;;mBAGG;gBACH,sEAAsE;gBACtE,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC7F,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBAE/C,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAExE,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,uCAAuC;gBAC9F,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,oCAAoC;gBAErG,MAAM,CAAwB,yBAAyB;YACxD,CAAC;YAED,OAAO,GAAG,CAAC;QACZ,CAAC;QAED,gEAAgE;QAChE,WAAW,CAAC,GAAW,EAAE,KAAuC;YAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,EAAE,CAAA;YAExD,UAAU,CAAC,MAAM,CAAC,CAAmB,+CAA+C;iBAClF,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAE7E,OAAO,MAAM,CAAC;QACf,CAAC;QAED,8EAA8E;QAC9E,YAAY,CAAC,MAAoB,EAAE,QAAgC;YAClE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAgB,8EAA8E;YAEtH,IAAI,CAAC;gBACJ,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,CAAa,EAAE,CAAC;oBAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACxC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;wBAAE,SAAS;oBAEpC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACtK,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBACzC,IAAI,CAAC,KAAK;wBAAE,SAAS;oBAErB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAY,CAAC,CAAC,CAAC,UAAU,CAAC;oBAC7F,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;oBAE3E,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBAEjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;YACF,CAAC;oBAAS,CAAC;gBACV,IAAI,CAAC,OAAO,GAAG,KAAK,CAAQ,CAAC,CAAa,eAAe;YAC1D,CAAC;YAED,sGAAsG;YACtG,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACzD,MAAM,EAAE,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,MAAM,CAAC,IAAI,CAAgB,CAAC,CAAC,CAAC,qBAAqB;gBAC5E,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAe,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACzG,CAAC;YAED,mCAAmC;YACnC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvE,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC9C,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;gBACxH,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAE9C,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED;;;;;;;;WAQG;QACH,cAAc,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAA0B;YACrE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,QAAQ,GAAG,EAAE,CAAC;gBACb,KAAK,KAAK,CAAC,CAAC,CAAqB,gBAAgB;gBACjD,KAAK,GAAG,CAAC;gBACT,KAAK,MAAM,EAAsB,iBAAiB;oBACjD,OAAO,CAAC,CAAA;gBACT,KAAK,GAAG,CAAC,CAAuB,cAAc;gBAC9C,KAAK,MAAM;oBACV,OAAO,MAAM,CAAC;gBACf,KAAK,GAAG,CAAC,CAAuB,kBAAkB;gBAClD,KAAK,MAAM,CAAC;gBACZ,KAAK,MAAM;oBACV,OAAO,CAAC,MAAM,CAAC;gBAChB,KAAK,GAAG,CAAC,CAAuB,0BAA0B;gBAC1D,KAAK,KAAK;oBACT,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;wBACxB,CAAC,CAAC,CAAC,MAAM;wBACT,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBACjB,KAAK,IAAI,EAAuB,uCAAuC;oBACtE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;wBACvB,CAAC,CAAC,CAAC,MAAM;wBACT,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBACjB,KAAK,GAAG,CAAC,CAAuB,yBAAyB;gBACzD,KAAK,OAAO;oBACX,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;wBACvB,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBAChB,KAAK,IAAI,CAAC,CAAsB,sCAAsC;gBACtE,KAAK,IAAI;oBACR,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;wBACxB,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBAChB,SAA+B,sBAAsB;oBACpD,OAAO,CAAC,CAAC;YACX,CAAC;QACF,CAAC;QAED;;;;;;;;;;;;;WAaG;QACH,aAAa,CAAC,MAAoB,EAAE,QAAgC;YACnE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,MAA2B,CAAC;YAC1E,IAAI,WAAW,CAAC,GAAG,CAAC,EAAmB,6CAA6C;gBACnF,OAAO,QAAQ,CAAC;YAEjB;;;;cAIE;YACF,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAU,CAAC;YACxE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;iBAChB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAU,CAAC,CAAC,EAAW,gCAAgC;gBACnF,OAAO,QAAQ,CAAC,CAAmB,sDAAsD;YAE1F,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,mCAAmC,GAAG,iBAAiB,GAAG,GAAG,CAAC,CAAC;gBACnG,OAAO,QAAQ,CAAC,CAAmB,8CAA8C;YAClF,CAAC;YAED,MAAM,OAAO,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,GAAG,CAAC,CAAC,CAAW,uBAAuB;YACrE,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAkB,2BAA2B;YACjE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAW,gCAAgC;iBAC5E,SAAS,CAAC,CAAC,EAAiB,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;YAEnD,MAAM,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAQ,yCAAyC;kBACtF,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YAChH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YAErB,OAAO,QAAQ;iBACb,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAoB,gBAAgB;QACrD,CAAC;QAED;;;WAGG;QACH,UAAU,CAAC,MAAoB,EAAE,QAAgC;YAChE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,MAA4B,CAAC;YAC9E,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC;gBAChE,OAAO,QAAQ,CAAC,CAAmB,iBAAiB;YAErD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,mCAAmC,GAAG,iBAAiB,GAAG,GAAG,CAAC,CAAC;gBACnG,OAAO,QAAQ,CAAC;YACjB,CAAC;YAED,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;gBACpC,IAAI,EAAE,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAe,mCAAmC;gBAC3E,KAAK,EAAE,EAAE,IAAI,QAAQ,CAAC,KAAK,EAAc,qCAAqC;gBAC9E,GAAG,EAAE,EAAE,IAAI,QAAQ,CAAC,GAAG,EAAgB,iCAAiC;aAC/D,CAAC,CAAC;YAEZ,mDAAmD;YACnD,IAAI,GAAG,EAAE,CAAC;gBACT,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC;gBACpB,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBACnC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC,CAAC;gBAE1D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBAErB,OAAO,QAAQ,CAAC;YACjB,CAAC;YAED,oFAAoF;YACpF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAM,kCAAkC;gBACnF,MAAM,KAAK,GAAG,QAAQ;qBACpB,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAE,oCAAoC;qBACrF,IAAI,GAAG,GAAG,CAAA,CAAqB,aAAa;gBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAG,kBAAkB;gBACrE,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAG,wBAAwB;YAC5E,CAAC;YAED,6CAA6C;YAC7C,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAkB,2BAA2B;YACjE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAG,sBAAsB;YAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAEzE,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YAExD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YAErB,gFAAgF;YAChF,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;iBAC7E,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS,6BAA6B;iBAC1E,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAQ,mBAAmB;QACpE,CAAC;QAED,wEAAwE;QACxE,UAAU,CAAC,SAAuB,EAAE,EAAE,QAAgC;YACrE,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAc,yCAAyC;gBACnF,OAAO,QAAQ,CAAC;YAEjB,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3E,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACd,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA,CAAA,yDAAyD;gBAC/G,EAAE,IAAI,EAAE,CAAC,CAAuB,sCAAsC;YACvE,CAAC;YAED,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAa,sDAAsD;gBAChG,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACvD,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,CAAC;YAED,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;gBACxF,EAAE,IAAI,EAAE,CAAC,CAAuB,4CAA4C;YAC7E,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE;gBACpD,EAAE,IAAI,EAAE,CAAC,CAAuB,wBAAwB;YAEzD,OAAO,QAAQ,CAAqB,kCAAkC;iBACpE,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACzG,CAAC;QAED;;;WAGG;QACH,UAAU,CAAC,MAAoB,EAAE,QAAgC;YAChE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,4BAA4B;YAClF,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,4BAA4B;YAClF,MAAM,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC;YAExB,IAAI,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvE,IAAI,IAAI,CAAC,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,gCAAgC;gBACrF,QAAQ,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAmC;YACjG,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,GAAG,IAAI,GAAG,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAClE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACvC,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YAErB,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED,qDAAqD;QACrD,WAAW,CAAC,GAAW;YACtB,MAAM,MAAM,GAAiB,EAAE,CAAA;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAQ,iDAAiD;gBACjG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAW,gCAAgC;gBAC3E,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAA,CAAW,8BAA8B;YAE1E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAElC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAEzC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACrB,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBACjF,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBAC9B,CAAC;gBACF,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAAE,MAAM,CAAa,sCAAsC;YAChF,CAAC;YAED,OAAO,MAAM,CAAC,CAAqB,oCAAoC;QACxE,CAAC;QAED,uDAAuD;QACvD,YAAY,CAAC,GAAW;YACvB,MAAM,MAAM,GAAiB,EAAE,CAAA;YAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAa,sCAAsC;YAErF,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBACxC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrB,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACnF,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC9B,CAAC;YACF,CAAC;YAED,OAAO,MAAM,CAAC;QACf,CAAC;QAED,iDAAiD;QACjD,WAAW,CAAC,GAAW;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAEhE,IAAI,WAAW,CAAC,GAAG,CAAC;gBACnB,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,GAAG,CAAC,CAAC;YAEvE,OAAO,GAAG,CAAC;QACZ,CAAC;QAED,oDAAoD;QACpD,IAAI,GAAG,CAAC,MAAuC,EAAE,EAAE;YAClD,OAAO,UAAU,CAAC,MAAM,CAAC;iBACvB,MAAM,CAAC,CAAC,GAA2B,EAAE,CAAC,GAAG,EAAE,GAAG,CAAgB,EAAE,EAAE;gBAClE,IAAI,SAAS,CAAC,GAAG,CAAC;oBACjB,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC1B,OAAO,GAAG,CAAC;YACZ,CAAC,EAAE,EAA4B,CAAC,CAAC;QACnC,CAAC,CAAA;QACD,gDAAgD;QAChD,IAAI,GAAG,CAAC,IAAU,EAAE,UAAyB,EAAE,EAAE,EAAE;;YAClD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC;YACvC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG;gBACjB,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;aACb,CAAC;YAEnB,8GAAmB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAA,CAAC,CAAG,iCAAiC;YAErF,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;oBACnD,MAAM,MAAM,GAAG,KAAK,CAAC;oBACrB,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAU,6BAA6B;yBACrE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE;wBAC/B,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU;4BAAE,OAAO,GAAG,CAAC;wBAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAc,CAAC,CAAC;wBACxC,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;wBAE5B,QAAQ,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,CAAC;4BAC/B,KAAK,UAAU,CAAC;4BAChB,KAAK,WAAW,CAAC;4BACjB,KAAK,UAAU,CAAC;4BAChB,KAAK,SAAS,CAAC;4BACf,KAAK,UAAU,CAAC;4BAChB,KAAK,YAAY,CAAC;4BAClB,KAAK,YAAY,CAAC;4BAClB,KAAK,iBAAiB,CAAC;4BACvB,KAAK,iBAAiB,CAAC;4BACvB,KAAK,gBAAgB;gCACpB,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;4BAE7B;gCACC,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,MAAM,WAAW,IAAI,gBAAgB,MAAM,GAAG,CAAC,CAAC;gCAC1G,OAAO,GAAG,CAAC;wBACb,CAAC;oBACF,CAAC,EAAE,GAAG,CAAC,CAAA;gBACT,CAAC;qBACI,CAAC;oBACL,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC3F,CAAC;YACF,CAAC;YAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1F,CAAC,CAAA;QACD,uDAAuD;QACvD,IAAI,GAAG,CAAC,IAAU,EAAE,UAAyB,EAAE,EAAE,EAAE;;YAClD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC;YACvC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG;gBACjB,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;aACb,CAAC;YAEnB,8GAAmB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAA,CAAC,CAAG,iCAAiC;YAErF,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;oBAEnD,IAAK,IAAY,CAAC,QAAQ;wBAAE,SAAS,CAAC,QAAQ,GAAI,IAAY,CAAC,QAAQ,CAAC;oBACxE,IAAK,IAAY,CAAC,QAAQ;wBAAE,SAAS,CAAC,QAAQ,GAAI,IAAY,CAAC,QAAQ,CAAC;oBAExE,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAU,6BAA6B;yBACrE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;wBAC9B,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,UAAU;4BAAE,OAAO,GAAG,CAAC;wBAEzD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;4BAC3C,QAAQ,GAAG,EAAE,CAAC;gCACb,KAAK,OAAO,CAAC;gCACb,KAAK,KAAK,CAAC;gCACX,KAAK,KAAK;oCACT,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;gCAE9E;oCACC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAa,CAAC,EAAE,CAAA;4BAC3E,CAAC;wBACF,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAuB,4BAA4B;wBAE3D,QAAQ,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,CAAC;4BAC/B,KAAK,cAAc;gCAClB,OAAO,GAAG,CAAC,YAAY,CAAC,MAAa,CAAC,CAAC;4BACxC,KAAK,cAAc;gCAClB,OAAO,GAAG,CAAC,YAAY,CAAC,MAAa,CAAC,CAAC;4BAExC,KAAK,YAAY,CAAC;4BAClB,KAAK,UAAU,CAAC;4BAChB,KAAK,UAAU,CAAC;4BAChB,KAAK,WAAW,CAAC;4BACjB,KAAK,SAAS,CAAC,CAAkB,4BAA4B;4BAC7D,KAAK,SAAS,EAAmB,0BAA0B;gCAC1D,OAAO,IAAI,CAAC,MAAM,CAAC,MAAa,EAAE,GAAG,CAAC,CAAC;4BAExC,KAAK,UAAU,CAAC;4BAChB,KAAK,WAAW,CAAC;4BACjB,qDAAqD;4BACrD,KAAK,SAAS,CAAC;4BACf,KAAK,UAAU,CAAC;4BAChB,KAAK,YAAY,CAAC;4BAClB,KAAK,YAAY,CAAC;4BAClB,KAAK,iBAAiB,CAAC;4BACvB,KAAK,iBAAiB,CAAC;4BACvB,KAAK,gBAAgB;gCACpB,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;4BAE9B,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,oDAAoD;4BACpD,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ;gCACZ,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAuB,CAAC,CAAC;gCACrD,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;4BAE7B,KAAK,YAAY;gCAChB,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;qCACxC,UAAU,EAAE,CAAC;4BAEhB,KAAK,YAAY,EAAmB,OAAO;gCAC1C,OAAO,GAAG,CAAC;4BAEZ,KAAK,aAAa;gCACjB,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;qCAChB,UAAU,EAAE,CAAC;4BAEhB,KAAK,YAAY;gCAChB,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;qCAC9C,UAAU,EAAE,CAAC;4BAEhB,KAAK,WAAW;gCACf,OAAO,GAAG;qCACR,UAAU,EAAE,CAAC;4BAEhB,KAAK,YAAY,CAAC;4BAClB,KAAK,cAAc,CAAC;4BACpB,KAAK,cAAc;gCAClB,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,MAAsC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;4BAE1F,kDAAkD;4BAClD,KAAK,UAAU;gCACd,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;qCACxC,UAAU,EAAE,CAAC;4BAEhB,KAAK,UAAU,EAAoB,kBAAkB;gCACpD,OAAO,GAAG,CAAC;4BAEZ,KAAK,WAAW;gCACf,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC;qCAC9C,UAAU,EAAE,CAAC;4BAEhB,KAAK,UAAU;gCACd,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;qCAC9C,UAAU,EAAE,CAAC;4BAEhB,KAAK,SAAS;gCACb,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;qCACrD,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;4BAEtB,KAAK,UAAU;gCACd,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;qCACtD,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;4BAExB,KAAK,YAAY;gCAChB,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;qCACxD,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;4BAExB,KAAK,YAAY;gCAChB,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;qCACxD,GAAG,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;4BAE9B,kDAAkD;4BAClD,KAAK,UAAU;gCACd,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;qCACjB,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;qCACxC,UAAU,EAAE;qCACZ,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;4BAEhC,KAAK,UAAU,EAAoB,OAAO;gCACzC,OAAO,GAAG;qCACR,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;4BAEhC,KAAK,WAAW;gCACf,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;qCAClB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;qCAChB,UAAU,EAAE;qCACZ,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;4BAEhC,KAAK,UAAU;gCACd,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;qCACjD,UAAU,EAAE;qCACZ,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;4BAEhC,KAAK,SAAS,CAAC;4BACf,KAAK,UAAU,CAAC;4BAChB,KAAK,YAAY,CAAC;4BAClB,KAAK,YAAY;gCAChB,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,MAA8C,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;qCAC7F,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;4BAEhC;gCACC,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,MAAM,WAAW,MAAM,gBAAgB,MAAM,GAAG,CAAC,CAAC;gCAC5G,OAAO,GAAG,CAAC;wBACb,CAAC;oBACF,CAAC,EAAE,GAAG,CAAC,CAAA,CAA2B,8CAA8C;gBAClF,CAAC;qBACI,CAAC;oBACL,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC3F,CAAC;YACF,CAAC;YAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1F,CAAC,CAAA;QAED,OAAO,GAAG,CAAmB,GAAM,EAAuB,EAAE;YAC3D,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACtB,OAAO,SAA2C,CAAC,CAAE,4BAA4B;YAElF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YACvC,IAAI,QAAQ,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC7C,CAAC,CAAE,GAAW,CAAC,GAAG,CAAW;gBAC7B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEf,iGAAiG;YACjG,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;gBACjH,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBAClB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC7C,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnE,CAAC;YACF,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAc,EAAE,KAAa,EAAE,EAAE;gBAC/E,QAAQ,KAAK,EAAE,CAAC;oBACf,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAClC,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnD,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBACpC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;oBACrC,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;oBAC5B,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;oBAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACvC,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACvC,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;oBAC5B,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;oBAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnE,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC/C,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC/C,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAClC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAClC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAClC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC3E,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBACtE,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;oBACrC,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACzC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;oBAC1B,OAAO,CAAC,CAAC,CAAC;wBACT,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;4BAC/B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;4BACtC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAiB,oCAAoC;oBACtE,CAAC;gBACF,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,MAAM,mBAAmB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5H,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAwB,CAAC;QAClF,CAAC,CAAA;QAUD,MAAM,CAAC,GAAkD,EAAE,QAAQ,EAAiC,EAAE,KAAK,GAAG,KAAK;YAClH,IAAI,KAAK,EAAE,IAAI,GAAkB,EAAE,EAAE,IAA4B,CAAC;YAClE,QAAQ,IAAI,EAAE,CAAC;gBACd,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC1D,IAAI,GAAG,GAAiB,CAAC,CAAc,4BAA4B;oBACnE,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAsB,CAAC,CAAC;oBAC9C,MAAM;gBACP,KAAK,QAAQ,CAAC,GAAG,CAAC,EAAmB,oCAAoC;oBACxE,KAAK,GAAG,GAAG,CAAC,CAAoB,mDAAmD;oBACnF,IAAI,QAAQ,CAAC,KAAK,CAAC;wBAClB,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,KAAyC,CAAC,CAAA;;wBAC3D,IAAI,GAAG,KAAmB,CAAC,CAAU,4CAA4C;oBACtF,MAAM;gBACP,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAS,2BAA2B;oBACxE,IAAI,GAAG,KAAK,CAAC,CAAoB,mDAAmD;oBACpF,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,GAAoB,CAAC,CAAC;oBAC5C,MAAM;gBACP,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAS,sDAAsD;oBACnG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAqC,CAAC,CAAC;oBAC/F,MAAM;gBACP,KAAK,QAAQ,CAAC,KAAK,CAAC;oBACnB,IAAI,GAAG,KAAK,CAAC;oBACb,KAAK,GAAG,GAAqB,CAAC;oBAC9B,MAAM;gBACP,KAAK,QAAQ,CAAC,KAAK,CAAC;oBACnB,IAAI,GAAI,KAA0C,CAAC,IAAI,CAAC;oBACxD,KAAK,GAAG,GAAqB,CAAC;oBAC9B,MAAM;gBACP;oBACC,KAAK,GAAG,GAAqB,CAAC,CAAW,6BAA6B;YACxE,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAM,0BAA0B;YAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YACjE,4FAA4F;YAC5F,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;YAE1I,IAAI,SAAS,CAAC,IAAI,CAAC;gBAClB,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAiB,CAAC,CAAM,mBAAmB;YAEpE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAW,mDAAmD;gBAChG,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAe,mDAAmD;qBACxF,MAAM,CAAC,CAAC,GAAQ,EAAE,GAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAG,QAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EACpF,SAAS,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAoB,CAAC,CAAC;gBAClE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAE,iCAAiC;QACvF,CAAC;QAED,iEAAiE;QACjE,MAAM,CAAC,GAAkC,EAAE,QAAQ,EAAiB;YACnE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAO,8BAA8B;YAC/E,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAU,CAAC;YACxD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAU,CAAC;YAC5D,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC;iBACpE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;iBACb,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;iBAC3C,IAAI,CAAC,EAAE,CAAC,CAAA;YAEV,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE3F,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,OAAO;oBACX,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrC,KAAK,QAAQ;oBACZ,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACtC,KAAK,OAAO;oBACX,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;gBACpC,KAAK,MAAM;oBACV,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAEpC,KAAK,OAAO;oBACX,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrC,KAAK,SAAS;oBACb,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACvC,KAAK,SAAS;oBACb,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAEvC,KAAK,cAAc,CAAC;gBACpB,KAAK,cAAc,CAAC;gBACpB,KAAK,aAAa;oBACjB,OAAO,GAAG,QAAQ,EAAE,CAAC;gBAEtB;oBACC,OAAO,GAAG,CAAC,GAAG,CAAC;YACjB,CAAC;QACF,CAAC;;YA3xDW,uDAAK;;;;;SAAL,KAAK;AAu8DlB,uBAAuB;AAEvB,yGAAyG;AACzG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAwB,0CAA0C;AAO/E,0DAA0D;AAC1D,wBAAwB,CAAG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,MAAM,CAAQ,KAAK,EAAE,OAAO,CAAC,CAAC;AACrG,6BAA6B,CAAC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,CAAkC,CAAC;AAC1I,uBAAuB,CAAI,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAwB,CAAC;AAC1H,qBAAqB,CAAK,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAQ,CAAC"} \ No newline at end of file diff --git a/packages/tempo/dist/tempo.config/plugins/plugin.ticker.d.ts b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.d.ts new file mode 100644 index 00000000..69cc7dbf --- /dev/null +++ b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.d.ts @@ -0,0 +1,22 @@ +import type { Tempo } from '#core/tempo.class.js'; +declare module '#core/tempo.class.js' { + namespace Tempo { + /** ticker 'intervalMs' allowed types */ type TickerInterval = number | string | bigint; + /** callback function for Tempo.ticker() */ type TickerCallback = (t: Tempo, stop: () => void) => void; + /** AsyncGenerator return type for Tempo.ticker() */ type TickerGenerator = AsyncGenerator & AsyncDisposable; + /** stop() function return type for Tempo.ticker() */ type TickerStop = (() => void) & Disposable; + /** combined return type for Tempo.ticker() */ type TickerResult = TickerGenerator | TickerStop; + function ticker(intervalMs: TickerInterval): TickerGenerator; + function ticker(intervalMs: TickerInterval, seed: Tempo.DateTime | Tempo.Options): TickerGenerator; + function ticker(intervalMs: TickerInterval, callback: TickerCallback): TickerStop; + function ticker(intervalMs: TickerInterval, seed: Tempo.DateTime | Tempo.Options, callback: TickerCallback): TickerStop; + } +} +/** + * # TickerPlugin + * Implementation of Tempo.ticker as an optional plugin. + * Extends the Tempo class with pulse-based date-time generators. + * Supports callbacks (Pattern 1) and Async Generators (Pattern 2). + * Both patterns emit their initial state immediately upon initialization (T=0). + */ +export declare const TickerPlugin: Tempo.Plugin; diff --git a/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js new file mode 100644 index 00000000..d28281aa --- /dev/null +++ b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js @@ -0,0 +1,60 @@ +import { asNumber } from '#core/shared/coercion.library.js'; +import { isNumber, isFunction } from '#core/shared/type.library.js'; +/** + * # TickerPlugin + * Implementation of Tempo.ticker as an optional plugin. + * Extends the Tempo class with pulse-based date-time generators. + * Supports callbacks (Pattern 1) and Async Generators (Pattern 2). + * Both patterns emit their initial state immediately upon initialization (T=0). + */ +export const TickerPlugin = (_options, TempoClass, _factory) => { + const ticker = function (intervalMs, seedOrCallback, callback) { + const interval = asNumber(intervalMs); + if (!isNumber(interval)) + throw new RangeError('Tempo.ticker: intervalMs must be a finite numeric value'); + const [seed, cb] = isFunction(seedOrCallback) + ? [undefined, seedOrCallback] + : [seedOrCallback, callback]; + const now = () => Temporal.Now.instant().epochMilliseconds; + let current = new TempoClass(seed); + // Pattern 1 ~ Callbacks + if (isFunction(cb)) { + let id, stopped = (interval === 0); + const start = now(), absInterval = Math.abs(interval); + let ticks = 0; + const stop = Object.assign(() => { + stopped = true; + clearTimeout(id); + }, { [Symbol.dispose]: () => stop() }); + (function tick() { + cb(current.clone(), stop); // unified emission + if (!stopped) { + const delay = Math.max(0, start + (++ticks * absInterval) - now()); + id = setTimeout(() => { + current = current.add({ milliseconds: interval }); // increment (or decrement) + tick(); // recurse + }, delay); + } + })(); // immediately-invoke tick() + return stop; + } + // Pattern 2 ~ Async Generators + const generator = (async function* () { + const start = now(), absInterval = Math.abs(interval); + let ticks = 0; + while (true) { + yield current.clone(); // emit immediately + if (interval === 0) + break; // support for 'emit-once' + const delay = Math.max(0, start + (++ticks * absInterval) - now()); + await new Promise(resolve => setTimeout(resolve, delay)); + current = current.add({ milliseconds: interval }); // increment (or decrement) + } + })(); + return Object.assign(generator, { + [Symbol.asyncDispose]: async () => { await generator.return(undefined); } + }); + }; + TempoClass.ticker = ticker; +}; +//# sourceMappingURL=plugin.ticker.js.map \ No newline at end of file diff --git a/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js.map b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js.map new file mode 100644 index 00000000..7bd42e8b --- /dev/null +++ b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"plugin.ticker.js","sourceRoot":"","sources":["../../../src/tempo.config/plugins/plugin.ticker.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/tempo/dist/tempo.config/tempo.default.d.ts b/packages/tempo/dist/tempo.config/tempo.default.d.ts new file mode 100644 index 00000000..0aa9639d --- /dev/null +++ b/packages/tempo/dist/tempo.config/tempo.default.d.ts @@ -0,0 +1,157 @@ +import type { Tempo } from '#core/tempo.class.js'; +/** common RegExp patterns */ +export declare const Match: { + /** match all {} pairs, if they start with a word char */ readonly braces: RegExp; + /** named capture-group, if it starts with a letter */ readonly captures: RegExp; + /** event */ readonly event: RegExp; + /** period */ readonly period: RegExp; + /** two digit year */ readonly twoDigit: RegExp; + /** date */ readonly date: RegExp; + /** time */ readonly time: RegExp; + /** hour-minute-second with no separator */ readonly hhmiss: RegExp; + /** separator characters (/ - . ,) */ readonly separator: RegExp; + /** modifier characters (+-<>=) */ readonly modifier: RegExp; + /** offset post keywords (ago|hence) */ readonly affix: RegExp; + /** strip out these characters from a string */ readonly strips: RegExp; + /** whitespace characters */ readonly spaces: RegExp; + /** Z character */ readonly zed: RegExp; +}; +/** Tempo Symbol registry */ +export declare const Token: import("#core/shared/type.library.js").Extend<{ + /** year */ readonly yy: symbol; + /** month */ readonly mm: symbol; + /** day */ readonly dd: symbol; + /** hour */ readonly hh: symbol; + /** minute */ readonly mi: symbol; + /** second */ readonly ss: symbol; + /** fraction */ readonly ff: symbol; + /** meridiem */ readonly mer: symbol; + /** short weekday name */ readonly www: symbol; + /** relative-suffix */ readonly afx: symbol; + /** time-suffix */ readonly sfx: symbol; + /** time unit */ readonly unt: symbol; + /** separator */ readonly sep: symbol; + /** modifier */ readonly mod: symbol; + /** generic number */ readonly nbr: symbol; + /** Tempo event */ readonly evt: symbol; + /** Tempo period */ readonly per: symbol; + /** time zone offset */ readonly tzd: symbol; + /** date */ readonly dt: symbol; + /** time */ readonly tm: symbol; + /** date and time */ readonly dtm: symbol; + /** day-month-year */ readonly dmy: symbol; + /** month-day-year */ readonly mdy: symbol; + /** year-month-day */ readonly ymd: symbol; + /** day of month offset */ readonly off: symbol; + /** weekDay */ readonly wkd: symbol; + /** relative offset (years, days, hours, etc) */ readonly rel: symbol; + /** timezone/calendar brackets */ readonly brk: symbol; +}, string, symbol>; +export type Token = typeof Token; +/** + * user will need to know these in order to configure their own patterns + * Tempo.Snippet is a simple regex pattern object e.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ } + * Tempo.Layout is a string-combination of Snippet names e.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?' + * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex. + * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument + */ +/** + * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy') + */ +export declare const Snippet: import("#core/shared/type.library.js").Extend<{ + readonly [Token.yy]: RegExp; + readonly [Token.mm]: RegExp; + readonly [Token.dd]: RegExp; + readonly [Token.hh]: RegExp; + readonly [Token.mi]: RegExp; + readonly [Token.ss]: RegExp; + readonly [Token.ff]: RegExp; + readonly [Token.mer]: RegExp; + readonly [Token.sfx]: RegExp; + readonly [Token.wkd]: RegExp; + readonly [Token.tzd]: RegExp; + readonly [Token.nbr]: RegExp; + readonly [Token.afx]: RegExp; + readonly [Token.mod]: RegExp; + readonly [Token.sep]: RegExp; + readonly [Token.unt]: RegExp; + readonly [Token.brk]: RegExp; +}, symbol, RegExp>; +export type Snippet = typeof Snippet; +/** + * a {layout} is a Record of snippet-combinations describing an input DateTime argument + * the Layout's keys are in the order that they will be checked against an input value + */ +export declare const Layout: import("#core/shared/type.library.js").Extend<{ + readonly [Token.dt]: "({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))"; + readonly [Token.tm]: "({hh}{mi}?{ss}?{ff}?{mer}?|{per})"; + readonly [Token.dtm]: "({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?"; + readonly [Token.dmy]: "({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"; + readonly [Token.mdy]: "({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"; + readonly [Token.ymd]: "({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"; + readonly [Token.wkd]: "{mod}?{wkd}{afx}?{sfx}?"; + readonly [Token.off]: "{mod}?{dd}{afx}?"; + readonly [Token.rel]: "{nbr}{sep}?{unt}{sep}?{afx}"; +}, symbol, string>; +export type Layout = typeof Layout; +/** + * an {event} is a Record of regex-pattern-like-string keys that describe Date strings. + * values can be a string or a function. + * if assigning a function, use standard 'function()' syntax to allow for 'this' binding. + * also, a function should always have a .toString() method which returns a parse-able Date string + */ +export declare const Event: import("#core/shared/type.library.js").Extend<{ + readonly 'new.?years? ?eve': "31 Dec"; + readonly nye: "31 Dec"; + readonly 'new.?years?( ?day)?': "01 Jan"; + readonly ny: "01 Jan"; + readonly 'christmas ?eve': "24 Dec"; + readonly christmas: "25 Dec"; + readonly 'xmas ?eve': "24 Dec"; + readonly xmas: "25 Dec"; + readonly now: (this: any) => any; + readonly today: (this: any) => any; + readonly tomorrow: (this: any) => any; + readonly yesterday: (this: any) => any; +}, string, string | Function>; +export type Event = typeof Event; +/** + * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings. + * values can be a string or a function. + * if using a function, use regular 'function()' syntax to allow for 'this' binding. + */ +export declare const Period: import("#core/shared/type.library.js").Extend<{ + readonly 'mid[ -]?night': "24:00"; + readonly morning: "8:00"; + readonly 'mid[ -]?morning': "10:00"; + readonly 'mid[ -]?day': "12:00"; + readonly noon: "12:00"; + readonly 'after[ -]?noon': "3:00pm"; + readonly evening: "18:00"; + readonly night: "20:00"; +}, string, string | Function>; +export type Period = typeof Period; +/** + * a {timeZone} alias dictionary mapping common abbreviations to IANA strings. + * Tempo will check this registry to convert abbreviations before passing them to Temporal. + */ +export declare const TimeZone: import("#core/shared/type.library.js").Extend<{ + readonly utc: "UTC"; + readonly gmt: "Europe/London"; + readonly est: "America/New_York"; + readonly cst: "America/Chicago"; + readonly mst: "America/Denver"; + readonly pst: "America/Los_Angeles"; + readonly aest: "Australia/Sydney"; + readonly acst: "Australia/Adelaide"; + readonly awst: "Australia/Perth"; + readonly nzt: "Pacific/Auckland"; + readonly cet: "Europe/Paris"; + readonly eet: "Europe/Helsinki"; + readonly ist: "Asia/Kolkata"; + readonly npt: "Asia/Kathmandu"; + readonly jst: "Asia/Tokyo"; +}, string, string>; +export type TimeZone = typeof TimeZone; +/** Reasonable default options for initial Tempo config */ +export declare const Default: import("#core/shared/type.library.js").SecureObject; diff --git a/packages/tempo/dist/tempo.config/tempo.default.js b/packages/tempo/dist/tempo.config/tempo.default.js new file mode 100644 index 00000000..3d8f9159 --- /dev/null +++ b/packages/tempo/dist/tempo.config/tempo.default.js @@ -0,0 +1,166 @@ +import { looseIndex } from '#core/shared/object.library.js'; +import { secure } from '#core/shared/utility.library.js'; +// BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW +// TEMPO functionality heavily depends on these patterns +/** common RegExp patterns */ +export const Match = { + /** match all {} pairs, if they start with a word char */ braces: /{([\w]+(?:\.[\w]+)*)}/g, + /** named capture-group, if it starts with a letter */ captures: /\(\?<([a-zA-Z][\w]*)>(.*?)(?=) */ modifier: /[\+\-\<\>][\=]?|this|next|prev|last/, + /** offset post keywords (ago|hence) */ affix: /ago|hence/, + /** strip out these characters from a string */ strips: /\(|\)/g, + /** whitespace characters */ spaces: /\s+/g, + /** Z character */ zed: /^Z$/, +}; +/** Tempo Symbol registry */ +export const Token = looseIndex()({ + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols + /** year */ yy: Symbol('yy'), + /** month */ mm: Symbol('mm'), + /** day */ dd: Symbol('dd'), + /** hour */ hh: Symbol('hh'), + /** minute */ mi: Symbol('mi'), + /** second */ ss: Symbol('ss'), + /** fraction */ ff: Symbol('ff'), + /** meridiem */ mer: Symbol('mer'), + /** short weekday name */ www: Symbol('www'), + /** relative-suffix */ afx: Symbol('afx'), + /** time-suffix */ sfx: Symbol('sfx'), + /** time unit */ unt: Symbol('unt'), + /** separator */ sep: Symbol('sep'), + /** modifier */ mod: Symbol('mod'), + /** generic number */ nbr: Symbol('nbr'), + /** Tempo event */ evt: Symbol('evt'), + /** Tempo period */ per: Symbol('per'), + /** time zone offset */ tzd: Symbol('tzd'), + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Layout Symbols + /** date */ dt: Symbol('date'), + /** time */ tm: Symbol('time'), + /** date and time */ dtm: Symbol('dateTime'), + /** day-month-year */ dmy: Symbol('dayMonthYear'), + /** month-day-year */ mdy: Symbol('monthDayYear'), + /** year-month-day */ ymd: Symbol('yearMonthDay'), + /** day of month offset */ off: Symbol('offset'), + /** weekDay */ wkd: Symbol('weekDay'), + /** relative offset (years, days, hours, etc) */ rel: Symbol('relativeOffset'), + /** timezone/calendar brackets */ brk: Symbol('brackets'), +}); +/** + * user will need to know these in order to configure their own patterns + * Tempo.Snippet is a simple regex pattern object e.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ } + * Tempo.Layout is a string-combination of Snippet names e.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?' + * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex. + * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument + */ +/** + * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy') + */ +// Note: computed Components ('evt', 'per') are added during 'Tempo.init()' (for static) and/or 'new Tempo()' (per instance) +export const Snippet = looseIndex()({ + [Token.yy]: /(?([0-9]{2})?[0-9]{2})/, // arbitrary upper-limit of yy=9999 + [Token.mm]: /(?[0\s]?[1-9]|1[0-2]|Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)/, // month-name (abbrev or full) or month-number 01-12 + [Token.dd]: /(?
[0\s]?[1-9]|[12][0-9]|3[01])(?:\s?(?:st|nd|rd|th))?/, // day-number 01-31 + [Token.hh]: /(?2[0-4]|[01]?[0-9])/, // hour-number 00-24 + [Token.mi]: /(\:(?[0-5][0-9]))/, // minute-number 00-59 + [Token.ss]: /(\:(?[0-5][0-9]))/, // seconds-number 00-59 + [Token.ff]: /(\.(?[0-9]{1,9}))/, // fractional-seconds up-to 9-digits + [Token.mer]: /(\s*(?am|pm))/, // meridiem suffix (am,pm) + [Token.sfx]: /((?:{sep}+|T)({tm}){tzd}?)/, // time-pattern suffix 'T {tm} Z' + [Token.wkd]: /(?Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)/, // day-name (abbrev or full) + [Token.tzd]: /(?Z|(?:\+(?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:00)|-(?:(?:0[0-9]|1[0-1]):?[0-5][0-9]|12:00)))/, // time-zone offset +14:00 to -12:00 + [Token.nbr]: /(?[0-9]*)/, // modifier count + [Token.afx]: new RegExp(`((s)? (?${Match.affix.source}))?{sep}?`), // affix optional plural 's' and (ago|hence) + [Token.mod]: new RegExp(`((?${Match.modifier.source})?{nbr} *)`), // modifier (+,-,<,<=,>,>=) plus optional offset-count + [Token.sep]: new RegExp(`(?:${Match.separator.source})`), // date-input separator character "/\\-., " (non-capture group) + [Token.unt]: /(?year|month|week|day|hour|minute|second|millisecond)(?:s)?/, // useful for '2 days ago' etc + [Token.brk]: /(\[(?[^\]]+)\](?:\[(?[^\]]+)\])?)?/, // timezone/calendar brackets [...] +}); +/** + * a {layout} is a Record of snippet-combinations describing an input DateTime argument + * the Layout's keys are in the order that they will be checked against an input value + */ +export const Layout = looseIndex()({ + [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))', // calendar or event + [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period + [Token.dtm]: '({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?', // calendar/event and clock/period + [Token.dmy]: '({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?', // day-month(-year) + [Token.mdy]: '({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?', // month-day(-year) + [Token.ymd]: '({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?', // year-month(-day) + [Token.wkd]: '{mod}?{wkd}{afx}?{sfx}?', // special layout (no {dt}!) used for weekday calcs (only one that requires {wkd} pattern) + [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset + [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago) +}); +/** + * an {event} is a Record of regex-pattern-like-string keys that describe Date strings. + * values can be a string or a function. + * if assigning a function, use standard 'function()' syntax to allow for 'this' binding. + * also, a function should always have a .toString() method which returns a parse-able Date string + */ +export const Event = looseIndex()({ + 'new.?years? ?eve': '31 Dec', + 'nye': '31 Dec', + 'new.?years?( ?day)?': '01 Jan', + 'ny': '01 Jan', + 'christmas ?eve': '24 Dec', + 'christmas': '25 Dec', + 'xmas ?eve': '24 Dec', + 'xmas': '25 Dec', + 'now': function () { return this.toPlainDateTime(); }, + 'today': function () { return this.toPlainDate(); }, + 'tomorrow': function () { return this.toPlainDate().add({ days: 1 }); }, + 'yesterday': function () { return this.toPlainDate().add({ days: -1 }); }, +}); +/** + * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings. + * values can be a string or a function. + * if using a function, use regular 'function()' syntax to allow for 'this' binding. + */ +export const Period = looseIndex()({ + 'mid[ -]?night': '24:00', + 'morning': '8:00', + 'mid[ -]?morning': '10:00', + 'mid[ -]?day': '12:00', + 'noon': '12:00', + 'after[ -]?noon': '3:00pm', + 'evening': '18:00', + 'night': '20:00', +}); +/** + * a {timeZone} alias dictionary mapping common abbreviations to IANA strings. + * Tempo will check this registry to convert abbreviations before passing them to Temporal. + */ +export const TimeZone = looseIndex()({ + 'utc': 'UTC', + 'gmt': 'Europe/London', + 'est': 'America/New_York', + 'cst': 'America/Chicago', + 'mst': 'America/Denver', + 'pst': 'America/Los_Angeles', + 'aest': 'Australia/Sydney', + 'acst': 'Australia/Adelaide', + 'awst': 'Australia/Perth', + 'nzt': 'Pacific/Auckland', + 'cet': 'Europe/Paris', + 'eet': 'Europe/Helsinki', + 'ist': 'Asia/Kolkata', + 'npt': 'Asia/Kathmandu', + 'jst': 'Asia/Tokyo', +}); +/** Reasonable default options for initial Tempo config */ +export const Default = secure({ + /** log to console */ debug: false, + /** catch or throw Errors */ catch: false, + /** used to parse two-digit years*/ pivot: 75, /** @link https://en.wikipedia.org/wiki/Date_windowing */ + /** precision to measure timestamps (ms | us) */ timeStamp: 'ms', + /** calendaring system */ calendar: 'iso8601', + /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https://en.wikipedia.org/wiki/Date_format_by_country */ + /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']], +}); +//# sourceMappingURL=tempo.default.js.map \ No newline at end of file diff --git a/packages/tempo/dist/tempo.config/tempo.default.js.map b/packages/tempo/dist/tempo.config/tempo.default.js.map new file mode 100644 index 00000000..e9be645f --- /dev/null +++ b/packages/tempo/dist/tempo.config/tempo.default.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tempo.default.js","sourceRoot":"","sources":["../../src/tempo.config/tempo.default.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/tempo/dist/tempo.config/tempo.enum.d.ts b/packages/tempo/dist/tempo.config/tempo.enum.d.ts new file mode 100644 index 00000000..4836d127 --- /dev/null +++ b/packages/tempo/dist/tempo.config/tempo.enum.d.ts @@ -0,0 +1,125 @@ +import type { Enum } from '#core/shared/enumerate.library.js'; +import type { OwnOf, KeyOf, ValueOf, LooseUnion, Mutable } from '#core/shared/type.library.js'; +/** + * Various enumerations used throughout Tempo library. + * These are exported and added as static getters of the Tempo class. + * Usage example: + * ```typescript + * const dayNames = Tempo.WEEKDAY.keys(); // ['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + * ``` + */ +/** */ +export declare const WEEKDAY: Enum.wrap>; +export declare const WEEKDAYS: Enum.wrap>; +export type WEEKDAY = KeyOf; +export type WEEKDAYS = KeyOf; +export type Weekday = ValueOf; +export declare const MONTH: Enum.wrap>; +export declare const MONTHS: Enum.wrap>; +export type MONTH = KeyOf; +export type MONTHS = KeyOf; +export type Month = ValueOf; +export declare const SEASON: Enum.wrap<{ + readonly Summer: "summer"; + readonly Autumn: "autumn"; + readonly Winter: "winter"; + readonly Spring: "spring"; +}>; +export declare const COMPASS: Enum.wrap<{ + readonly North: "north"; + readonly East: "east"; + readonly South: "south"; + readonly West: "west"; +}>; +export type SEASON = ValueOf; +export type COMPASS = ValueOf; +/** number of seconds in a time unit */ +export declare const DURATION: Enum.wrap<{ + /** approx number of seconds in a year */ readonly year: 31536000; + /** approx number of seconds in a month */ readonly month: 2628000; + /** number of seconds in a week */ readonly week: 604800; + /** number of seconds in a day */ readonly day: 86400; + /** number of seconds in an hour */ readonly hour: 3600; + /** number of seconds in a minute */ readonly minute: 60; + /** one second */ readonly second: 1; + /** number of seconds in a millisecond */ readonly millisecond: 0.001; + /** number of seconds in a microsecond */ readonly microsecond: 0.000001; + /** number of seconds in a nanosecond */ readonly nanosecond: 1e-9; +}>; +/** number of milliseconds in a time unit */ +export declare const DURATIONS: Enum.wrap<{ + /** approx number of milliseconds in a year */ readonly years: number; + /** approx number of milliseconds in a month */ readonly months: number; + /** number of milliseconds in a week */ readonly weeks: number; + /** number of milliseconds in a day */ readonly days: number; + /** number of milliseconds in an hour */ readonly hours: number; + /** number of milliseconds in a minute */ readonly minutes: number; + /** number of milliseconds in a second */ readonly seconds: number; + /** one millisecond */ readonly milliseconds: number; + /** number of milliseconds in a microsecond */ readonly microseconds: number; + /** number of milliseconds in a nanosecond */ readonly nanoseconds: number; +}>; +export type DURATION = KeyOf; +export type DURATIONS = KeyOf; +/** pre-defined Format code short-cuts */ +export declare const FORMAT: Enum.wrap<{ + /** useful for standard date display */ readonly display: "{www}, {dd} {mmm} {yyyy}"; + /** useful for standard datestamps */ readonly weekDate: "{www}, {yyyy}-{mmm}-{dd}"; + /** useful for standard timestamps */ readonly weekTime: "{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"; + /** useful for standard full timestamps */ readonly weekStamp: "{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"; + /** useful for readable month and day */ readonly dayMonth: "{dd}-{mmm}"; + /** useful for Date */ readonly dayDate: "{dd}-{mmm}-{yyyy}"; + /** display with Time */ readonly dayTime: "{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"; + /** useful for stamping logs */ readonly logStamp: "{yyyy}{mm}{dd}T{hhmiss}.{ff}"; + /** useful for sorting display-strings */ readonly sortTime: "{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"; + /** useful for sorting week order */ readonly yearWeek: "{wy}{ww}"; + /** useful for sorting month order */ readonly yearMonth: "{yyyy}{mm}"; + /** useful for sorting date order */ readonly yearMonthDay: "{yyyy}{mm}{dd}"; + /** just Date portion */ readonly date: "{yyyy}-{mm}-{dd}"; + /** just Time portion */ readonly time: "{hh}:{mi}:{ss}"; +}>; +export type FORMAT = ValueOf; +export type Format = LooseUnion>; +/** patterns that return a number */ +type NumericPattern = '{yyyy}{mm}' | '{yyww}' | '{yyyy}{mm}{dd}' | '{wy}{ww}' | '{wy}'; +/** pre-configured format strings */ +export type OwnFormat = Mutable>; +/** mapping of format names to instance-resolutions (string | number) */ +export type FormatType = K extends keyof OwnFormat ? (OwnFormat[K] extends NumericPattern ? number : string) : K extends NumericPattern ? number : string | number; +/** mapping of format names to instance-resolutions (string | number) */ +export type Formats = { + [K in keyof OwnFormat]: FormatType; +} & Record; +/** Enum registry of format strings */ +export type FormatEnum = Enum.wrap>; +export declare const LIMIT: import("#core/shared/type.library.js").SecureObject<{ + /** Tempo(31-Dec-9999.23:59:59).ns */ readonly maxTempo: bigint; + /** Tempo(01-Jan-1000.00:00:00).ns */ readonly minTempo: bigint; +}>; +export declare const ELEMENT: Enum.wrap<{ + readonly yy: "year"; + readonly mm: "month"; + readonly ww: "week"; + readonly dd: "day"; + readonly hh: "hour"; + readonly mi: "minute"; + readonly ss: "second"; + readonly ms: "millisecond"; + readonly us: "microsecond"; + readonly ns: "nanosecond"; +}>; +export type ELEMENT = ValueOf; +export type Element = KeyOf; +export declare const MUTATION: any; +export type MUTATION = ValueOf; +export type Mutation = KeyOf; +export declare const ZONED_DATE_TIME: any; +export type ZONED_DATE_TIME = ValueOf; +export type ZonedDateTime = KeyOf; +export declare const OPTION: Enum.wrap>; +export type OPTION = typeof OPTION; +export type Option = KeyOf = [A, B] + */ +export type UnionToTuple> = Acc['length'] extends SafeRecursion ? T[] : [ + T +] extends [never] ? Acc : UnionToTuple, [Last, ...Acc]>; +/** Deep Readonly object for type safety */ +export type Secure = T extends (infer R)[] ? SecureArray : T extends Function ? T : T extends object ? SecureObject : T; +export interface SecureArray extends ReadonlyArray> { +} +export type SecureObject = { + readonly [K in keyof T]: Secure; +}; +type LooseString = (string & {}); +type LooseProperty = (PropertyKey & {}); +/** Loose union */ +export type LooseUnion = T | LooseString; +/** Loose property key */ +export type LooseKey = K | LooseProperty; +/** Extend an object with a generic-signature */ +export type Extend = T & { + [P in K]: V; +}; +export {}; diff --git a/packages/library/src/type.library.js b/packages/library/src/type.library.js new file mode 100644 index 00000000..13c3b1e0 --- /dev/null +++ b/packages/library/src/type.library.js @@ -0,0 +1,81 @@ +/** the primitive type reported by toStringTag() */ +const protoType = (obj) => Object.prototype.toString.call(obj).slice(8, -1); +/** + * return an object's type as a ProperCase string. + * if instance, return Class name + */ +export const getType = (obj, ...instances) => { + const type = protoType(obj); + switch (true) { + case type === 'Object': + const name = isArrayLike(obj) + ? 'ArrayLike' // special case Object: ArrayLike + : obj.constructor?.name ?? 'Object'; // some Objects do not have a constructor method + return (instances + .find(inst => obj instanceof inst.class)?.type // allow for 'real' name of Instance, after minification + ?? name); // return Object name + case type === 'Function' && Function.prototype.toString.call(obj).startsWith('class '): + return 'Class'; + default: + return type; + } +}; +/** return TypeValue object */ +export const asType = (value, ...instances) => ({ type: getType(value, ...instances), value }); +/** assert value is one of a list of Types */ +export const isType = (obj, ...types) => types.includes(getType(obj)); +/** Type-Guards: assert \ is of \ */ +export const isPrimitive = (obj) => isType(obj, 'String', 'Number', 'BigInt', 'Boolean', 'Symbol', 'Undefined', 'Void', 'Null', 'Empty'); +export const isReference = (obj) => !isPrimitive(obj); +export const isIterable = (obj) => Symbol.iterator in Object(obj) && !isString(obj); +export const isString = (obj) => isType(obj, 'String'); +export const isNumber = (obj) => isType(obj, 'Number') && isFinite(obj); +export const isInteger = (obj) => isType(obj, 'BigInt'); +export const isIntegerLike = (obj) => isType(obj, 'String') && /^-?[0-9]+n$/.test(obj); +export const isDigit = (obj) => isType(obj, 'Number', 'BigInt'); +export const isBoolean = (obj) => isType(obj, 'Boolean'); +export const isArray = (obj) => isType(obj, 'Array'); +export const isArrayLike = (obj) => protoType(obj) === 'Object' && 'length' in obj && Object.keys(obj).every(key => key === 'length' || !isNaN(Number(key))); +export const isObject = (obj) => isType(obj, 'Object'); +export const isDate = (obj) => isType(obj, 'Date'); +export const isRegExp = (obj) => isType(obj, 'RegExp'); +export const isRegExpLike = (obj) => isType(obj, 'String') && /^\/.*\/$/.test(obj); +export const isSymbol = (obj) => isType(obj, 'Symbol'); +export const isSymbolFor = (obj) => isType(obj, 'Symbol') && Symbol.keyFor(obj) !== undefined; +export const isPropertyKey = (obj) => isType(obj, 'String', 'Number', 'Symbol'); +export const isNull = (obj) => isType(obj, 'Null'); +export const isNullish = (obj) => isType(obj, 'Null', 'Undefined', 'Void', 'Empty'); +export const isUndefined = (obj) => isType(obj, 'Undefined', 'Void', 'Empty'); +export const isDefined = (obj) => !isNullish(obj); +export const isClass = (obj) => isType(obj, 'Class'); +export const isFunction = (obj) => isType(obj, 'Function', 'AsyncFunction'); +export const isPromise = (obj) => isType(obj, 'Promise'); +export const isMap = (obj) => isType(obj, 'Map'); +export const isSet = (obj) => isType(obj, 'Set'); +export const isError = (err) => isType(err, 'Error'); +export const isTemporal = (obj) => protoType(obj).startsWith('Temporal.'); +// non-standard Objects +export const isTempo = (obj) => isType(obj, 'Tempo'); +export const isEnum = (obj) => isType(obj, 'Enumify'); +export const isPledge = (obj) => isType(obj, 'Pledge'); +export const nullToZero = (obj) => obj ?? 0; +export const nullToEmpty = (obj) => obj ?? ''; +export const nullToValue = (obj, value) => obj ?? value; +/** object has no values */ +export const isEmpty = (obj) => false + || isNullish(obj) + || (isObject(obj) && (Reflect.ownKeys(obj).length === 0)) + || (isString(obj) && (obj.trim().length === 0)) + || (isNumber(obj) && (isNaN(obj) === true)) + || (isArray(obj) && (obj.length === 0)) + || (isSet(obj) && (obj.size === 0)) + || (isMap(obj) && (obj.size === 0)); +export function assertCondition(condition, message) { + if (!condition) + throw new Error(message); +} +export function assertString(str) { assertCondition(isString(str), `Invalid string: ${str}`); } +; +export function assertNever(val) { throw new Error(`Unexpected object: ${val}`); } +; +//# sourceMappingURL=type.library.js.map \ No newline at end of file diff --git a/packages/library/src/type.library.js.map b/packages/library/src/type.library.js.map new file mode 100644 index 00000000..de68a95c --- /dev/null +++ b/packages/library/src/type.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"type.library.js","sourceRoot":"","sources":["type.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/shared/src/type.library.ts b/packages/library/src/type.library.ts similarity index 100% rename from packages/shared/src/type.library.ts rename to packages/library/src/type.library.ts diff --git a/packages/library/src/utility.library.d.ts b/packages/library/src/utility.library.d.ts new file mode 100644 index 00000000..18b5afcb --- /dev/null +++ b/packages/library/src/utility.library.d.ts @@ -0,0 +1,32 @@ +import type { Secure, ValueOf } from '#library/type.library.js'; +/** General utility functions */ +/** analyze the Call Stack to determine calling Function's name */ +export declare const getCaller: () => string; +/** analyze the Call Stack to determine calling Function's name */ +export declare const getScript: (nbr?: number) => string; +/** + * introduce a wait-timer that will Error() on timeOut. + * best used with Promise.race([xxx(), sleep()] + * @param msg string to display on a timeout + * @param timeOut how many milliseconds to sleep (default 2-seconds) + * @returns Promise\ + */ +export declare const sleep: (msg?: string, timeOut?: number) => Promise; +/** Javascript Runtimes */ +export declare const CONTEXT: { + readonly Unknown: "unknown"; + readonly Browser: "browser"; + readonly NodeJS: "nodejs"; + readonly Deno: "deno"; + readonly GoogleAppsScript: "google-apps-script"; +}; +export type CONTEXT = ValueOf; +type Context = { + global: any; + type: CONTEXT; +}; +/** determine JavaScript environment context */ +export declare const getContext: () => Context; +/** deep-freeze an Array | Object to make it immutable */ +export declare function secure(obj: T): Secure; +export {}; diff --git a/packages/library/src/utility.library.js b/packages/library/src/utility.library.js new file mode 100644 index 00000000..6b74e5ff --- /dev/null +++ b/packages/library/src/utility.library.js @@ -0,0 +1,55 @@ +import { ownValues } from '#library/reflection.library.js'; +import { isDefined, isReference } from '#library/type.library.js'; +/** General utility functions */ +/** analyze the Call Stack to determine calling Function's name */ +export const getCaller = () => { + const stackTrace = new Error().stack // only tested in latest FF and Chrome + ?.split('\n') + ?.map(itm => itm.trim()) + ?.filter(itm => !itm.startsWith('Error')) + ?? []; + const callerName = stackTrace[2].split(' '); + return (callerName[1] === 'new') ? callerName[2] : callerName[1].split('.')[0]; +}; +/** analyze the Call Stack to determine calling Function's name */ +export const getScript = (nbr = 1) => { + const stackTrace = new Error().stack + ?.match(/([^ \n\(@])*([a-z]*:\/\/\/?)*?[a-z0-9\/\\]*\.js/ig)?.[nbr]; + return decodeURI(stackTrace ?? ''); // decodeURI is needed to handle spaces in file-names +}; +/** + * introduce a wait-timer that will Error() on timeOut. + * best used with Promise.race([xxx(), sleep()] + * @param msg string to display on a timeout + * @param timeOut how many milliseconds to sleep (default 2-seconds) + * @returns Promise\ + */ +export const sleep = (msg = 'sleep: timed out', timeOut = 2000) => new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), timeOut)); +/** Javascript Runtimes */ +export const CONTEXT = { + 'Unknown': 'unknown', + 'Browser': 'browser', + 'NodeJS': 'nodejs', + 'Deno': 'deno', + 'GoogleAppsScript': 'google-apps-script', +}; +/** determine JavaScript environment context */ +export const getContext = () => { + const global = globalThis; + if (isDefined(global.SpreadsheetApp)) + return { global, type: CONTEXT.GoogleAppsScript }; + if (isDefined(global.window?.document)) + return { global, type: CONTEXT.Browser }; + if (isDefined(global.process?.versions?.node)) + return { global, type: CONTEXT.NodeJS }; + return { global, type: CONTEXT.Unknown }; +}; +// useful for those times when a full Enumify object is not needed, but still lock the Object from mutations +/** deep-freeze an Array | Object to make it immutable */ +export function secure(obj) { + if (isReference(obj)) // skip primitive values + ownValues(obj) // retrieve the properties on obj + .forEach(val => Object.isFrozen(val) || secure(val)); // secure each value, if not already Frozen + return Object.freeze(obj); // freeze the object itself +} +//# sourceMappingURL=utility.library.js.map \ No newline at end of file diff --git a/packages/library/src/utility.library.js.map b/packages/library/src/utility.library.js.map new file mode 100644 index 00000000..4a96b6ce --- /dev/null +++ b/packages/library/src/utility.library.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utility.library.js","sourceRoot":"","sources":["utility.library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGlE,gCAAgC;AAEhC,kEAAkE;AAClE,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC7B,MAAM,UAAU,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,CAAW,sCAAsC;QACpF,EAAE,KAAK,CAAC,IAAI,CAAC;QACb,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;WACtC,EAAE,CAAA;IAEN,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE5C,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC,CAAA;AAED,kEAAkE;AAClE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE;IACpC,MAAM,UAAU,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK;QACnC,EAAE,KAAK,CAAC,mDAAmD,CAC3D,EAAE,CAAC,GAAG,CAAC,CAAA;IACR,OAAO,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAY,qDAAqD;AACrG,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,kBAAkB,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE,CACjE,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAEtF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,OAAO,GAAG;IACtB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,MAAM;IACd,kBAAkB,EAAE,oBAAoB;CAC/B,CAAA;AAIV,+CAA+C;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,GAAY,EAAE;IACvC,MAAM,MAAM,GAAG,UAAiB,CAAC;IAEjC,IAAI,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;QACnC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAEnD,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAE1C,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;QAC5C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IAEzC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;AAC1C,CAAC,CAAA;AAED,4GAA4G;AAC5G,yDAAyD;AACzD,MAAM,UAAU,MAAM,CAAU,GAAM;IACrC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAoB,wBAAwB;QAC/D,SAAS,CAAC,GAAU,CAAC,CAAkB,iCAAiC;aACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,2CAA2C;IAEnG,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAc,CAAC,CAAU,2BAA2B;AAC7E,CAAC"} \ No newline at end of file diff --git a/packages/shared/src/utility.library.ts b/packages/library/src/utility.library.ts similarity index 92% rename from packages/shared/src/utility.library.ts rename to packages/library/src/utility.library.ts index e39a8f1d..c2963a15 100644 --- a/packages/shared/src/utility.library.ts +++ b/packages/library/src/utility.library.ts @@ -1,6 +1,6 @@ -import { ownValues } from '#core/shared/reflection.library.js'; -import { isDefined, isReference } from '#core/shared/type.library.js'; -import type { Secure, ValueOf } from '#core/shared/type.library.js'; +import { ownValues } from '#library/reflection.library.js'; +import { isDefined, isReference } from '#library/type.library.js'; +import type { Secure, ValueOf } from '#library/type.library.js'; /** General utility functions */ diff --git a/packages/shared/tsconfig.json b/packages/library/tsconfig.json similarity index 68% rename from packages/shared/tsconfig.json rename to packages/library/tsconfig.json index 9e53a248..acb980d6 100644 --- a/packages/shared/tsconfig.json +++ b/packages/library/tsconfig.json @@ -3,10 +3,15 @@ "compilerOptions": { "outDir": "./dist", "rootDir": "./src", - "composite": true + "composite": true, + "paths": { + "#library/*": [ + "./src/*" + ] + } }, "include": [ "src/**/*.ts", "../../packages/tempo/src/temporal.global.d.ts" ] -} \ No newline at end of file +} diff --git a/packages/shared/tsconfig.tsbuildinfo b/packages/library/tsconfig.tsbuildinfo similarity index 88% rename from packages/shared/tsconfig.tsbuildinfo rename to packages/library/tsconfig.tsbuildinfo index 3bd7831e..ceee88d2 100644 --- a/packages/shared/tsconfig.tsbuildinfo +++ b/packages/library/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es5.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2016.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.dom.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.iterator.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.date.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.error.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.temporal.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.decorators.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/tslib/tslib.d.ts","../../node_modules/tslib/modules/index.d.ts","./src/type.library.ts","./src/reflection.library.ts","./src/utility.library.ts","./src/function.library.ts","./src/serialize.library.ts","./src/coercion.library.ts","./src/object.library.ts","./src/array.library.ts","./src/buffer.library.ts","./src/number.library.ts","./src/class.library.ts","./src/cipher.class.ts","./src/proxy.library.ts","./src/enumerate.library.ts","./src/logify.class.ts","./src/string.library.ts","./src/pledge.class.ts","./src/prototype.library.ts","./src/storage.library.ts","./src/index.ts","../../node_modules/@js-temporal/polyfill/index.d.ts","../tempo/src/temporal.global.d.ts","../../node_modules/@js-temporal/polyfill/index.d.cts"],"fileIdsList":[[89],[90,91,92,95,96,97,104,107],[90],[90,95,96,99,100,101],[90,91,92,95,104,107],[90,91,95,104,107],[90,91,92,93,94,95,101,103,104,107],[90,91,93,104,107],[90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109],[90,91,101,104,107],[90,91,96,104,107],[90,91,92,104,107],[90,91,93,95,96,97,101,104,105,106,107],[90,91,96,98,104,106,107],[90,91,92,93,104,107],[90,91,104,107],[90,91,92,94,104,107],[90,91,93,95,104,107],[90,91,95,96,104,107],[111]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b8f34dd1757f68e03262b1ca3ddfa668a855b872f8bdd5224d6f993a7b37dc2c","impliedFormat":99},{"version":"72aff3c112768314654fe1583a54614f0bcc2a985aa8d1f2a334313321212772","signature":"684d391ca510d78e22084e58d12c5a19659f1e2765c1f85fe05a4aa8281ec863","impliedFormat":99},{"version":"d88ce4b739fc4799331e4b828e83a8616bff51ab9190a168623e38849658b317","signature":"d22478eed6469d7d11575986ff38d0942e7981a516b934a21b399c75df13a559","impliedFormat":99},{"version":"dc52a3606fd6b6c6b583a796c7841651ddb47e951325498a23828d70ef8570ff","signature":"46a3b3f6611b31bdbb24f6ea6291ff64aaafe3d3eb189f2ed786962d964fc736","impliedFormat":99},{"version":"e6e41db4718e8730f7e2f1d0be01ae13c99b531f9d4b3b9930e1a0f79dd18728","signature":"04608b30cb34a5e2f171500a628340d81b2898b3e5b247a0ed9b5c83c382d14c","impliedFormat":99},{"version":"3315d9a9e0da4fed057fcfb361053e7f1c9e65d2c2d0ab994f19a1ae3f671ad1","signature":"b57f30b23f87cd3438dc2dadcc99f33c8e4947d5448be1ce86c43e96af2c7c65","impliedFormat":99},{"version":"61e23c577bd0e71dd7461348462eab83b0661fa4a283b83ea384cea68bb360f0","signature":"3a767818046085b8646ddaeedc55a76712b84b9e679c31597fecd3b0f812932b","impliedFormat":99},{"version":"67c5531cfc3e3203ea4858d83a09928e451df11edec728ec8b52ed00efceaff3","signature":"a162bb04720e622ea27f40b8b459e9c218fb951e02cf8cd790d3e56b762c2835","impliedFormat":99},{"version":"6666ce9ee076c7f638d0ff3164c48522232cd2e0e31e0e17472a7a4d2d2ecb52","signature":"f78a519adc9225a301abdf34927bfe61f391db27d941fabb80a01e761b530e65","impliedFormat":99},{"version":"736a148b81a47cf628e5488cf149f4c6b91641eb3d570a5404b63538d9e49cda","signature":"b60a94d5200c1acd31f4f05a289e3b53430b3426a6f092870525ac2e63677f8a","impliedFormat":99},{"version":"d4688f4bd90c93b13fd13f7d080f62173fe63b71562edfad557b7cd784eabbce","signature":"d666ac04d2db63d69bf6ac392465ca2d8374f1263a3143e691e2c418042cb0d7","impliedFormat":99},{"version":"a272039396c9351c6f2faa0f69ef582be255bf2868474a0f9b3cf588d7504fe9","signature":"0bf02d7dd7989531b513816609974767366309413fdd2f6d4d4f4164df7edcce","impliedFormat":99},{"version":"a7bd2411ec96ffc97c14489a307e3565aa86cbc159fc14da03e2c4d416c8a5d4","signature":"1de326f9d01673c7153b2d3b8737463700fdcfd9c9e2e0ecd278b638071ba7e6","impliedFormat":99},{"version":"3c1ee462fe8c843b0c84fe23b61880a4132c5a44c70a0352a3937d6e29505896","signature":"5ed2c72912aa59f7409365cd62fe3405ba890b79b1c7f6cda22951ae309ecc55","impliedFormat":99},{"version":"244b004efe430fe4104cde7003f3ace2f50b512f8511e8a8b0a0e7f58cb64df3","signature":"661ae81ad9a030b4c21e0868a6562983c839f0a3c34113ed8156316371759b7e","impliedFormat":99},{"version":"86a22977b9669fe229d70721749f39e12bcc1ec82d1517f46dcd5b75dd50ff8c","signature":"8d29a7ddd9b8b7328ecf7c7f8e0b64521cc4c3d57cd99aad373687a892d77f5f","impliedFormat":99},{"version":"1fdcfe9f9e325aeffa2110135ef74a6fd89d0b1163b86962529aa859a234a803","signature":"48702c29ab45c6d3088024ef92b42fcff0bcaabd4fefad39229ae14d042c2dd3","impliedFormat":99},{"version":"2beda1c7bec2c8041ad24fe5ca2449fecdabc3c9d02f9e86ffc5065f2a65cc2f","signature":"7896e0221ce63fa76a0f1186ddd0bf99e82a361ccde6316cebb869c9ce50bbf4","impliedFormat":99},{"version":"d3c0082351bfd1a3e291257a036a59c4e25c5e88c77979ce641a75583bb43b2e","signature":"dd4caebeb46431cd248d5dc6c55f11ebe3dc88bcbcf37c1110b97d9f7adc08f7","affectsGlobalScope":true,"impliedFormat":99},{"version":"f33de9eb5d1ece5b8f0d4c6aa4d42603293588128ef51f23218a532132dda188","signature":"e9fac1bbc35989dcb29a8be6ed14fcba5606b6528b817f3a20ce78a115d4f33e","impliedFormat":99},{"version":"03bfddfc1240c31aa2f19c91eab048918d8adae71061cc53d913900081f7cea3","impliedFormat":99},{"version":"893fbc7e2a50a3a780d3d6eb6899e45fe8dc4ca56708770b4731e481f55af599","impliedFormat":99},{"version":"2b38ae82df529a9d125662fc7b71f3204cb9e8f3160a2497db7808c74050c18f","affectsGlobalScope":true,"impliedFormat":99},{"version":"893fbc7e2a50a3a780d3d6eb6899e45fe8dc4ca56708770b4731e481f55af599","impliedFormat":1}],"root":[[91,110],112],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"exactOptionalPropertyTypes":false,"importHelpers":true,"module":199,"noImplicitAny":true,"noImplicitReturns":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[90,1],[98,2],[99,3],[102,4],[101,5],[96,6],[104,7],[94,8],[110,9],[105,10],[100,11],[97,12],[107,13],[108,14],[103,15],[92,16],[95,17],[109,18],[106,19],[91,3],[93,12],[112,20]],"latestChangedDtsFile":"./dist/index.d.ts","version":"6.0.1-rc"} \ No newline at end of file +{"fileNames":["../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es5.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2016.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.dom.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.iterator.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.promise.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2025.regexp.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.array.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.date.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.error.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.temporal.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.decorators.d.ts","../../../../../../usr/local/lib/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/tslib/tslib.d.ts","../../node_modules/tslib/modules/index.d.ts","./src/type.library.ts","./src/reflection.library.ts","./src/utility.library.ts","./src/function.library.ts","./src/serialize.library.ts","./src/coercion.library.ts","./src/object.library.ts","./src/array.library.ts","./src/buffer.library.ts","./src/number.library.ts","./src/class.library.ts","./src/cipher.class.ts","./src/proxy.library.ts","./src/enumerate.library.ts","./src/logify.class.ts","./src/string.library.ts","./src/pledge.class.ts","./src/prototype.library.ts","./src/storage.library.ts","./src/index.ts","../../node_modules/@js-temporal/polyfill/index.d.ts","../tempo/src/temporal.global.d.ts","../../node_modules/@js-temporal/polyfill/index.d.cts"],"fileIdsList":[[89],[90,91,92,95,96,97,104,107],[90],[90,95,96,99,100,101],[90,91,92,95,104,107],[90,91,95,104,107],[90,91,92,93,94,95,101,103,104,107],[90,91,93,104,107],[90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109],[90,91,101,104,107],[90,91,96,104,107],[90,91,92,104,107],[90,91,93,95,96,97,101,104,105,106,107],[90,91,96,98,104,106,107],[90,91,92,93,104,107],[90,91,104,107],[90,91,92,94,104,107],[90,91,93,95,104,107],[90,91,95,96,104,107],[111]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b8f34dd1757f68e03262b1ca3ddfa668a855b872f8bdd5224d6f993a7b37dc2c","impliedFormat":99},{"version":"72aff3c112768314654fe1583a54614f0bcc2a985aa8d1f2a334313321212772","signature":"684d391ca510d78e22084e58d12c5a19659f1e2765c1f85fe05a4aa8281ec863","impliedFormat":99},{"version":"c4e498f96930f5b94cf87c75f58f4cf2e3c8d05873aaab5ff3f83cebea06ebbd","signature":"9fdcdaa22beadae79fcde71d8cbff0c0b92baf4aa00ac6334532c3839e3973a9","impliedFormat":99},{"version":"ad4d3d8774341c86cda7135d342b000baad115434d34af74b2de385441cbd1b8","signature":"f6e51df531f349c1bc7fac95a6bb0f4eacdc9149badf777c2032091fe493ac0f","impliedFormat":99},{"version":"185720529d2b95a2d4f09f8310ce7b7bb84a81bbb32682fe7f281b81256d0652","signature":"ee1b59d1e7c684061a507b96bca2b20b0d8bf8b9dfd97e679ffd2747a365caff","impliedFormat":99},{"version":"76700bdd17491ffa08557b80fa7dd012650fdd9daa5eb0f71f53dca34168d7f9","signature":"b57f30b23f87cd3438dc2dadcc99f33c8e4947d5448be1ce86c43e96af2c7c65","impliedFormat":99},{"version":"355075699a3d4b64d90b81fa3f269a3e45383f77d38f5b0d09e49529976b0a50","signature":"3a767818046085b8646ddaeedc55a76712b84b9e679c31597fecd3b0f812932b","impliedFormat":99},{"version":"323b36412de3b5565c60c159183b124ea800ae401745667b063f8654cf2d9f62","signature":"177f86b568735dcdf743040e58bd5aafcd3311238c463354120041b1b8cd76ab","impliedFormat":99},{"version":"3ec237d9985c1b0c363a3c4f2e3e2e1bde4a5b0482efcc22fbac7cb6495690c7","signature":"184eced87dd9c96636b47846501b20311c2425486f4d75d2e7d53b349775804a","impliedFormat":99},{"version":"736a148b81a47cf628e5488cf149f4c6b91641eb3d570a5404b63538d9e49cda","signature":"b60a94d5200c1acd31f4f05a289e3b53430b3426a6f092870525ac2e63677f8a","impliedFormat":99},{"version":"5d293691909282c5f49c21c5b68a72a50042249c43f6ce08a552802ef011a71f","signature":"8fd7de136b2598107d9347d47c4048ce8edaf3027643749e04a5e9c2eab241ee","impliedFormat":99},{"version":"e44347e3a4119a66945bbfe62d93833491960a72dbce06a3cdbaf4637e808bfe","signature":"e51669c30ae779d5e9060d549bb2f7c55ae65f860e25aa7de0923302d8b4cc58","impliedFormat":99},{"version":"7b72408aa06d03822b730c23f2e4e4631e147e471920c4ef8a37d1f63d0ba3d2","signature":"1de326f9d01673c7153b2d3b8737463700fdcfd9c9e2e0ecd278b638071ba7e6","impliedFormat":99},{"version":"b2bb675fa12d6093686d205f8a7f98f66061b2cad56eb4932aa97b7a9624c08f","signature":"5ed2c72912aa59f7409365cd62fe3405ba890b79b1c7f6cda22951ae309ecc55","impliedFormat":99},{"version":"33013416191642fbc8ac291c219fe088947d5aa3bc67d31be7ef135b98e18422","signature":"f9458fa4357650d2b72f171de427f4194074454b71b3db99d2ed0ce31b4428b3","impliedFormat":99},{"version":"5c3d9ed0eea95654947fd53521c7a3765d37676fdc614d01d8fa827c871bced1","signature":"85f9fc325ea85708af6681aa16301617202564aa050265b02e83aacdf2ca0025","impliedFormat":99},{"version":"8848adc801dfaf5712be31528bf30a629194c80b1c472f87911a352609952c2a","signature":"48702c29ab45c6d3088024ef92b42fcff0bcaabd4fefad39229ae14d042c2dd3","impliedFormat":99},{"version":"a2e80c1e80c4a7d4e257af16e0eb612f9f0bc2ea33e0b7cb984f04c2cf659fb4","signature":"c15c6446df5265d709dfd31f2b99a8068df022fcaa17632746de3e9aab4f74f1","impliedFormat":99},{"version":"12c6bb4e0e69f3de37caa7cceeb1baff5efa88d22354f254d7c849f8876c29f9","signature":"f6717baf05abd8bbb5606a9547c4b2a8db2c4e30422c3decf9cbaacb085b6735","affectsGlobalScope":true,"impliedFormat":99},{"version":"6af4213bec5521b216b78ef7492877ccff2251ec9f46b8719bcedd214eff16d8","signature":"e9fac1bbc35989dcb29a8be6ed14fcba5606b6528b817f3a20ce78a115d4f33e","impliedFormat":99},{"version":"03bfddfc1240c31aa2f19c91eab048918d8adae71061cc53d913900081f7cea3","impliedFormat":99},{"version":"893fbc7e2a50a3a780d3d6eb6899e45fe8dc4ca56708770b4731e481f55af599","impliedFormat":99},{"version":"2b38ae82df529a9d125662fc7b71f3204cb9e8f3160a2497db7808c74050c18f","affectsGlobalScope":true,"impliedFormat":99},{"version":"893fbc7e2a50a3a780d3d6eb6899e45fe8dc4ca56708770b4731e481f55af599","impliedFormat":1}],"root":[[91,110],112],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"exactOptionalPropertyTypes":false,"importHelpers":true,"module":199,"noImplicitAny":true,"noImplicitReturns":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[90,1],[98,2],[99,3],[102,4],[101,5],[96,6],[104,7],[94,8],[110,9],[105,10],[100,11],[97,12],[107,13],[108,14],[103,15],[92,16],[95,17],[109,18],[106,19],[91,3],[93,12],[112,20]],"latestChangedDtsFile":"./dist/index.d.ts","version":"6.0.1-rc"} \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.d.ts index c45fc4b9..32c3c699 100644 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.d.ts +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.d.ts @@ -1,5 +1,5 @@ export * from './tempo.class.js'; export * as enums from './tempo.config/tempo.enum.js'; -export * from '#core/shared/pledge.class.js'; -export * from '#core/shared/serialize.library.js'; -export * from '#core/shared/enumerate.library.js'; +export * from '#library/pledge.class.js'; +export * from '#library/serialize.library.js'; +export * from '#library/enumerate.library.js'; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js index e710e659..cae3acf1 100644 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js @@ -1,6 +1,6 @@ export * from './tempo.class.js'; // Temporal wrapper export * as enums from './tempo.config/tempo.enum.js'; -export * from '#core/shared/pledge.class.js'; // Promise wrapper -export * from '#core/shared/serialize.library.js'; // stringify, objectify, cloneify functions -export * from '#core/shared/enumerate.library.js'; // enumify function +export * from '#library/pledge.class.js'; // Promise wrapper +export * from '#library/serialize.library.js'; // stringify, objectify, cloneify functions +export * from '#library/enumerate.library.js'; // enumify function //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.d.ts index 276e2127..7e605d59 100644 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.d.ts +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.d.ts @@ -1,10 +1,10 @@ -import '#core/shared/temporal.polyfill.js'; -import type { IntRange, LooseUnion, Mutable, NonOptional, OwnOf, Property, TPlural, Type } from '#core/shared/type.library.js'; -import type { Enum } from '#core/shared/enumerate.library.js'; -import * as enums from '#core/tempo.config/tempo.enum.js'; -import { Token, Snippet, Layout, Event, Period } from '#core/tempo.config/tempo.default.js'; -import '#core/shared/prototype.library.js'; -declare module '#core/shared/type.library.js' { +import '#library/temporal.polyfill.js'; +import type { IntRange, LooseUnion, Mutable, NonOptional, OwnOf, Property, TPlural, Type } from '#library/type.library.js'; +import type { Enum } from '#library/enumerate.library.js'; +import * as enums from '#tempo/tempo.config/tempo.enum.js'; +import { Token, Snippet, Layout, Event, Period } from '#tempo/tempo.config/tempo.default.js'; +import '#library/prototype.library.js'; +declare module '#library/type.library.js' { interface TypeValueMap { Tempo: { type: 'Tempo'; @@ -20,10 +20,10 @@ declare module '#core/shared/type.library.js' { */ export declare class Tempo { #private; - /** Weekday names (short-form) */ static get WEEKDAY(): Enum.wrap>; - /** Weekday names (long-form) */ static get WEEKDAYS(): Enum.wrap>; - /** Month names (short-form) */ static get MONTH(): Enum.wrap>; - /** Month names (long-form) */ static get MONTHS(): Enum.wrap>; + /** Weekday names (short-form) */ static get WEEKDAY(): Enum.wrap>; + /** Weekday names (long-form) */ static get WEEKDAYS(): Enum.wrap>; + /** Month names (short-form) */ static get MONTH(): Enum.wrap>; + /** Month names (long-form) */ static get MONTHS(): Enum.wrap>; /** Time durations as seconds (singular) */ static get DURATION(): Enum.wrap<{ readonly year: 31536000; readonly month: 2628000; @@ -73,7 +73,7 @@ export declare class Tempo { readonly ns: "nanosecond"; }>; /** Pre-configured format {name -> string} pairs */ static get FORMAT(): Tempo.Format; - /** some useful Dates */ static get LIMIT(): import("#core/shared/type.library.js").SecureObject<{ + /** some useful Dates */ static get LIMIT(): import("#library/type.library.js").SecureObject<{ readonly maxTempo: any; readonly minTempo: any; }>; @@ -170,9 +170,9 @@ export declare class Tempo { * Useful for debugging how the final configuration is built. */ static get options(): { - default: import("#core/shared/type.library.js").SecureObject<{ + default: import("#library/type.library.js").SecureObject<{ readonly scope: "default"; - readonly timeZone: import("#core/shared/type.library.js").Extend<{ + readonly timeZone: import("#library/type.library.js").Extend<{ readonly utc: "UTC"; readonly gmt: "Europe/London"; readonly est: "America/New_York"; @@ -198,9 +198,9 @@ export declare class Tempo { readonly pivot?: number | undefined; readonly sphere?: Tempo.COMPASS | undefined; readonly timeStamp?: Tempo.TimeStamp | undefined; - readonly mdyLocales?: string | import("#core/shared/type.library.js").SecureArray | undefined; - readonly mdyLayouts?: import("#core/shared/type.library.js").SecureArray | undefined; - readonly snippet?: string | import("#core/shared/type.library.js").SecureObject | undefined; + readonly mdyLayouts?: import("#library/type.library.js").SecureArray | undefined; + readonly snippet?: string | import("#library/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; - readonly layout?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; + readonly layout?: string | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly event?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject any; readonly tomorrow: (this: any) => any; readonly yesterday: (this: any) => any; - }, string, string | Function>> | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; - readonly period?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; + readonly period?: Tempo.Logic | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly formats?: import("#core/shared/type.library.js").SecureObject> | undefined; - readonly plugins?: Tempo.Plugin | import("#core/shared/type.library.js").SecureArray | undefined; + readonly formats?: import("#library/type.library.js").SecureObject> | undefined; + readonly plugins?: Tempo.Plugin | import("#library/type.library.js").SecureArray | undefined; readonly value?: Tempo.DateTime; readonly anchor?: Temporal.ZonedDateTime; }>; @@ -297,7 +297,7 @@ export declare class Tempo { static from(tempo: Tempo.DateTime | undefined, options?: Tempo.Options): Tempo; static now(): any; /** static Tempo.terms getter */ - static get terms(): import("#core/shared/type.library.js").SecureArray<{ + static get terms(): import("#library/type.library.js").SecureArray<{ key: string; scope?: string; description: string; @@ -305,11 +305,11 @@ export declare class Tempo { /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ static addTerm(...plugin: Tempo.TermPlugin[]): void; /** static Tempo properties getter */ - static get properties(): import("#core/shared/type.library.js").SecureArray; + static get properties(): import("#library/type.library.js").SecureArray; /** Tempo initial default settings */ - static get default(): import("#core/shared/type.library.js").SecureObject<{ + static get default(): import("#library/type.library.js").SecureObject<{ readonly scope: "default"; - readonly timeZone: import("#core/shared/type.library.js").Extend<{ + readonly timeZone: import("#library/type.library.js").Extend<{ readonly utc: "UTC"; readonly gmt: "Europe/London"; readonly est: "America/New_York"; @@ -335,9 +335,9 @@ export declare class Tempo { readonly pivot?: number | undefined; readonly sphere?: Tempo.COMPASS | undefined; readonly timeStamp?: Tempo.TimeStamp | undefined; - readonly mdyLocales?: string | import("#core/shared/type.library.js").SecureArray | undefined; - readonly mdyLayouts?: import("#core/shared/type.library.js").SecureArray | undefined; - readonly snippet?: string | import("#core/shared/type.library.js").SecureObject | undefined; + readonly mdyLayouts?: import("#library/type.library.js").SecureArray | undefined; + readonly snippet?: string | import("#library/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; - readonly layout?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; + readonly layout?: string | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly event?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject any; readonly tomorrow: (this: any) => any; readonly yesterday: (this: any) => any; - }, string, string | Function>> | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; - readonly period?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; + readonly period?: Tempo.Logic | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly formats?: import("#core/shared/type.library.js").SecureObject> | undefined; - readonly plugins?: Tempo.Plugin | import("#core/shared/type.library.js").SecureArray | undefined; + readonly formats?: import("#library/type.library.js").SecureObject> | undefined; + readonly plugins?: Tempo.Plugin | import("#library/type.library.js").SecureArray | undefined; readonly value?: Tempo.DateTime; readonly anchor?: Temporal.ZonedDateTime; }>; @@ -416,7 +416,7 @@ export declare class Tempo { /** allow for auto-convert of Tempo to BigInt, Number or String */ [Symbol.toPrimitive](hint?: 'string' | 'number' | 'default'): any; /** iterate over instance formats */ - [Symbol.iterator](): ArrayIterator>; + [Symbol.iterator](): ArrayIterator>; get [Symbol.toStringTag](): string; /** * Instantiates a new `Tempo` object. @@ -467,7 +467,7 @@ export declare class Tempo { /** Instance-specific parse rules (merged with global) */ get parse(): Tempo.Parse; /** Object containing results from all term plugins */ get term(): Tempo.Terms; /** Formatted results for all pre-defined format codes */ get fmt(): Tempo.Formats; - /** units since epoch */ get epoch(): import("#core/shared/type.library.js").SecureObject<{ + /** units since epoch */ get epoch(): import("#library/type.library.js").SecureObject<{ /** seconds since epoch */ readonly ss: number; /** milliseconds since epoch */ readonly ms: any; /** microseconds since epoch */ readonly us: number; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js index 61f63ccf..e1a2cce3 100644 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js @@ -1,23 +1,23 @@ import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from "tslib"; -import '#core/shared/temporal.polyfill.js'; // side-effect runtime check for Temporal +import '#library/temporal.polyfill.js'; // side-effect runtime check for Temporal // #region library modules~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -import { Logify } from '#core/shared/logify.class.js'; -import { ifDefined } from '#core/shared/object.library.js'; -import { secure } from '#core/shared/utility.library.js'; -import { Immutable, Serializable } from '#core/shared/class.library.js'; -import { asArray } from '#core/shared/array.library.js'; -import { cleanify, stringify } from '#core/shared/serialize.library.js'; -import { getStorage, setStorage } from '#core/shared/storage.library.js'; -import { ownKeys, ownEntries, getAccessors, omit } from '#core/shared/reflection.library.js'; -import { getProxy } from '#core/shared/proxy.library.js'; -import { getContext, CONTEXT } from '#core/shared/utility.library.js'; -import { asNumber, asInteger, isNumeric, ifNumeric } from '#core/shared/number.library.js'; -import { pad, singular, toProperCase, trimAll } from '#core/shared/string.library.js'; -import { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#core/shared/type.library.js'; -import * as enums from '#core/tempo.config/tempo.enum.js'; -import registerTerms from '#core/tempo.config/terms/term.import.js'; -import { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#core/tempo.config/tempo.default.js'; -import '#core/shared/prototype.library.js'; // patch prototypes +import { Logify } from '#library/logify.class.js'; +import { ifDefined } from '#library/object.library.js'; +import { secure } from '#library/utility.library.js'; +import { Immutable, Serializable } from '#library/class.library.js'; +import { asArray } from '#library/array.library.js'; +import { cleanify, stringify } from '#library/serialize.library.js'; +import { getStorage, setStorage } from '#library/storage.library.js'; +import { ownKeys, ownEntries, getAccessors, omit } from '#library/reflection.library.js'; +import { getProxy } from '#library/proxy.library.js'; +import { getContext, CONTEXT } from '#library/utility.library.js'; +import { asNumber, asInteger, isNumeric, ifNumeric } from '#library/number.library.js'; +import { pad, singular, toProperCase, trimAll } from '#library/string.library.js'; +import { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#library/type.library.js'; +import * as enums from '#tempo/tempo.config/tempo.enum.js'; +import registerTerms from '#tempo/tempo.config/terms/term.import.js'; +import { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#tempo/tempo.config/tempo.default.js'; +import '#library/prototype.library.js'; // patch prototypes // #region Const variables /** key to use for storage / globalThis Symbol */ export const $Tempo = Symbol.for('$Tempo'); /** current execution context*/ const Context = getContext(); diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.d.ts index 9e776a7f..fff643b8 100644 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.d.ts +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.d.ts @@ -1,5 +1,5 @@ -import type { Tempo } from '#core/tempo.class.js'; -declare module '#core/tempo.class.js' { +import type { Tempo } from '#tempo/tempo.class.js'; +declare module '#tempo/tempo.class.js' { namespace Tempo { let ticker: { (intervalMs: number | string | bigint): AsyncGenerator & AsyncDisposable; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js index 5633b49d..cde47298 100644 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js @@ -1,5 +1,5 @@ -import { asNumber } from '#core/shared/number.library.js'; -import { isNumber, isFunction } from '#core/shared/type.library.js'; +import { asNumber } from '#library/number.library.js'; +import { isNumber, isFunction } from '#library/type.library.js'; /** * # TickerPlugin * Implementation of Tempo.ticker as an optional plugin. diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.d.ts index 0aa9639d..19c45213 100644 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.d.ts +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.d.ts @@ -1,4 +1,4 @@ -import type { Tempo } from '#core/tempo.class.js'; +import type { Tempo } from '#tempo/tempo.class.js'; /** common RegExp patterns */ export declare const Match: { /** match all {} pairs, if they start with a word char */ readonly braces: RegExp; @@ -17,7 +17,7 @@ export declare const Match: { /** Z character */ readonly zed: RegExp; }; /** Tempo Symbol registry */ -export declare const Token: import("#core/shared/type.library.js").Extend<{ +export declare const Token: import("#library/type.library.js").Extend<{ /** year */ readonly yy: symbol; /** month */ readonly mm: symbol; /** day */ readonly dd: symbol; @@ -58,7 +58,7 @@ export type Token = typeof Token; /** * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy') */ -export declare const Snippet: import("#core/shared/type.library.js").Extend<{ +export declare const Snippet: import("#library/type.library.js").Extend<{ readonly [Token.yy]: RegExp; readonly [Token.mm]: RegExp; readonly [Token.dd]: RegExp; @@ -82,7 +82,7 @@ export type Snippet = typeof Snippet; * a {layout} is a Record of snippet-combinations describing an input DateTime argument * the Layout's keys are in the order that they will be checked against an input value */ -export declare const Layout: import("#core/shared/type.library.js").Extend<{ +export declare const Layout: import("#library/type.library.js").Extend<{ readonly [Token.dt]: "({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))"; readonly [Token.tm]: "({hh}{mi}?{ss}?{ff}?{mer}?|{per})"; readonly [Token.dtm]: "({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?"; @@ -100,7 +100,7 @@ export type Layout = typeof Layout; * if assigning a function, use standard 'function()' syntax to allow for 'this' binding. * also, a function should always have a .toString() method which returns a parse-able Date string */ -export declare const Event: import("#core/shared/type.library.js").Extend<{ +export declare const Event: import("#library/type.library.js").Extend<{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; @@ -120,7 +120,7 @@ export type Event = typeof Event; * values can be a string or a function. * if using a function, use regular 'function()' syntax to allow for 'this' binding. */ -export declare const Period: import("#core/shared/type.library.js").Extend<{ +export declare const Period: import("#library/type.library.js").Extend<{ readonly 'mid[ -]?night': "24:00"; readonly morning: "8:00"; readonly 'mid[ -]?morning': "10:00"; @@ -135,7 +135,7 @@ export type Period = typeof Period; * a {timeZone} alias dictionary mapping common abbreviations to IANA strings. * Tempo will check this registry to convert abbreviations before passing them to Temporal. */ -export declare const TimeZone: import("#core/shared/type.library.js").Extend<{ +export declare const TimeZone: import("#library/type.library.js").Extend<{ readonly utc: "UTC"; readonly gmt: "Europe/London"; readonly est: "America/New_York"; @@ -154,4 +154,4 @@ export declare const TimeZone: import("#core/shared/type.library.js").Extend<{ }, string, string>; export type TimeZone = typeof TimeZone; /** Reasonable default options for initial Tempo config */ -export declare const Default: import("#core/shared/type.library.js").SecureObject; +export declare const Default: import("#library/type.library.js").SecureObject; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js index 3d8f9159..244d047d 100644 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js @@ -1,5 +1,5 @@ -import { looseIndex } from '#core/shared/object.library.js'; -import { secure } from '#core/shared/utility.library.js'; +import { looseIndex } from '#library/object.library.js'; +import { secure } from '#library/utility.library.js'; // BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW // TEMPO functionality heavily depends on these patterns /** common RegExp patterns */ diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.d.ts index 6da1cf1e..10d1f5f0 100644 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.d.ts +++ b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.d.ts @@ -1,4 +1,4 @@ -import type { KeyOf, ValueOf, LooseUnion } from '#core/shared/type.library.js'; +import type { KeyOf, ValueOf, LooseUnion } from '#library/type.library.js'; /** * Various enumerations used throughout Tempo library. * These are exported and added as static getters of the Tempo class. @@ -8,23 +8,23 @@ import type { KeyOf, ValueOf, LooseUnion } from '#core/shared/type.library.js'; ``` */ /** */ -export declare const WEEKDAY: import("#core/shared/enumerate.library.js").Enum.wrap>; -export declare const WEEKDAYS: import("#core/shared/enumerate.library.js").Enum.wrap>; +export declare const WEEKDAY: import("#library/enumerate.library.js").Enum.wrap>; +export declare const WEEKDAYS: import("#library/enumerate.library.js").Enum.wrap>; export type WEEKDAY = KeyOf; export type WEEKDAYS = KeyOf; export type Weekday = ValueOf; -export declare const MONTH: import("#core/shared/enumerate.library.js").Enum.wrap>; -export declare const MONTHS: import("#core/shared/enumerate.library.js").Enum.wrap>; +export declare const MONTH: import("#library/enumerate.library.js").Enum.wrap>; +export declare const MONTHS: import("#library/enumerate.library.js").Enum.wrap>; export type MONTH = KeyOf; export type MONTHS = KeyOf; export type Month = ValueOf; -export declare const SEASON: import("#core/shared/enumerate.library.js").Enum.wrap<{ +export declare const SEASON: import("#library/enumerate.library.js").Enum.wrap<{ readonly Summer: "summer"; readonly Autumn: "autumn"; readonly Winter: "winter"; readonly Spring: "spring"; }>; -export declare const COMPASS: import("#core/shared/enumerate.library.js").Enum.wrap<{ +export declare const COMPASS: import("#library/enumerate.library.js").Enum.wrap<{ readonly North: "north"; readonly East: "east"; readonly South: "south"; @@ -33,7 +33,7 @@ export declare const COMPASS: import("#core/shared/enumerate.library.js").Enum.w export type SEASON = ValueOf; export type COMPASS = ValueOf; /** number of seconds in a time unit */ -export declare const DURATION: import("#core/shared/enumerate.library.js").Enum.wrap<{ +export declare const DURATION: import("#library/enumerate.library.js").Enum.wrap<{ /** approx number of seconds in a year */ readonly year: 31536000; /** approx number of seconds in a month */ readonly month: 2628000; /** number of seconds in a week */ readonly week: 604800; @@ -46,7 +46,7 @@ export declare const DURATION: import("#core/shared/enumerate.library.js").Enum. /** number of seconds in a nanosecond */ readonly nanosecond: 1e-9; }>; /** number of milliseconds in a time unit */ -export declare const DURATIONS: import("#core/shared/enumerate.library.js").Enum.wrap<{ +export declare const DURATIONS: import("#library/enumerate.library.js").Enum.wrap<{ /** approx number of milliseconds in a year */ readonly years: number; /** approx number of milliseconds in a month */ readonly months: number; /** number of milliseconds in a week */ readonly weeks: number; @@ -61,7 +61,7 @@ export declare const DURATIONS: import("#core/shared/enumerate.library.js").Enum export type DURATION = KeyOf; export type DURATIONS = KeyOf; /** pre-defined Format code short-cuts */ -export declare const FORMAT: import("#core/shared/enumerate.library.js").Enum.wrap<{ +export declare const FORMAT: import("#library/enumerate.library.js").Enum.wrap<{ /** useful for standard date display */ readonly display: "{www}, {dd} {mmm} {yyyy}"; /** useful for standard datestamps */ readonly weekDate: "{www}, {yyyy}-{mmm}-{dd}"; /** useful for standard timestamps */ readonly weekTime: "{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"; @@ -79,11 +79,11 @@ export declare const FORMAT: import("#core/shared/enumerate.library.js").Enum.wr }>; export type FORMAT = ValueOf; export type Format = LooseUnion>; -export declare const LIMIT: import("#core/shared/type.library.js").SecureObject<{ +export declare const LIMIT: import("#library/type.library.js").SecureObject<{ /** Tempo(31-Dec-9999.23:59:59).ns */ readonly maxTempo: any; /** Tempo(01-Jan-1000.00:00:00).ns */ readonly minTempo: any; }>; -export declare const ELEMENT: import("#core/shared/enumerate.library.js").Enum.wrap<{ +export declare const ELEMENT: import("#library/enumerate.library.js").Enum.wrap<{ readonly yy: "year"; readonly mm: "month"; readonly ww: "week"; @@ -103,9 +103,9 @@ export type Mutation = KeyOf; export declare const ZONED_DATE_TIME: any; export type ZONED_DATE_TIME = ValueOf; export type ZonedDateTime = KeyOf; -export declare const OPTION: import("#core/shared/enumerate.library.js").Enum.wrap>; +export declare const OPTION: import("#library/enumerate.library.js").Enum.wrap>; export type OPTION = typeof OPTION; export type Option = KeyOf
[0\\s]?[1-9]|[12][0-9]|3[01])(?:\\s?(?:st|nd|rd|th))?/, // day-number 01-31\n [Token.hh]: /(?2[0-4]|[01]?[0-9])/, // hour-number 00-24\n [Token.mi]: /(\\:(?[0-5][0-9]))/, // minute-number 00-59\n [Token.ss]: /(\\:(?[0-5][0-9]))/, // seconds-number 00-59\n [Token.ff]: /(\\.(?[0-9]{1,9}))/, // fractional-seconds up-to 9-digits\n [Token.mer]: /(\\s*(?am|pm))/, // meridiem suffix (am,pm)\n [Token.sfx]: /((?:{sep}+|T)({tm}){tzd}?)/, // time-pattern suffix 'T {tm} Z'\n [Token.wkd]: /(?Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)/, // day-name (abbrev or full)\n [Token.tzd]: /(?Z|(?:\\+(?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:00)|-(?:(?:0[0-9]|1[0-1]):?[0-5][0-9]|12:00)))/, // time-zone offset\t+14:00 to -12:00\n [Token.nbr]: /(?[0-9]*)/, // modifier count\n [Token.afx]: new RegExp(`((s)? (?${Match.affix.source}))?{sep}?`), // affix optional plural 's' and (ago|hence)\n [Token.mod]: new RegExp(`((?${Match.modifier.source})?{nbr} *)`), // modifier (+,-,<,<=,>,>=) plus optional offset-count\n [Token.sep]: new RegExp(`(?:${Match.separator.source})`), // date-input separator character \"/\\\\-., \" (non-capture group)\n [Token.unt]: /(?year|month|week|day|hour|minute|second|millisecond)(?:s)?/, // useful for '2 days ago' etc\n [Token.brk]: /(\\[(?[^\\]]+)\\](?:\\[(?[^\\]]+)\\])?)?/, // timezone/calendar brackets [...]\n});\n/**\n * a {layout} is a Record of snippet-combinations describing an input DateTime argument\n * the Layout's keys are in the order that they will be checked against an input value\n */\nexport const Layout = looseIndex()({\n [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))', // calendar or event\n [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period\n [Token.dtm]: '({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?', // calendar/event and clock/period\n [Token.dmy]: '({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?', // day-month(-year)\n [Token.mdy]: '({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?', // month-day(-year)\n [Token.ymd]: '({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?', // year-month(-day)\n [Token.wkd]: '{mod}?{wkd}{afx}?{sfx}?', // special layout (no {dt}!) used for weekday calcs (only one that requires {wkd} pattern)\n [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset\n [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago)\n});\n/**\n * an {event} is a Record of regex-pattern-like-string keys that describe Date strings.\n * values can be a string or a function.\n * if assigning a function, use standard 'function()' syntax to allow for 'this' binding.\n * also, a function should always have a .toString() method which returns a parse-able Date string\n */\nexport const Event = looseIndex()({\n 'new.?years? ?eve': '31 Dec',\n 'nye': '31 Dec',\n 'new.?years?( ?day)?': '01 Jan',\n 'ny': '01 Jan',\n 'christmas ?eve': '24 Dec',\n 'christmas': '25 Dec',\n 'xmas ?eve': '24 Dec',\n 'xmas': '25 Dec',\n 'now': function () { return this.toPlainDateTime(); },\n 'today': function () { return this.toPlainDate(); },\n 'tomorrow': function () { return this.toPlainDate().add({ days: 1 }); },\n 'yesterday': function () { return this.toPlainDate().add({ days: -1 }); },\n});\n/**\n * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings.\n * values can be a string or a function.\n * if using a function, use regular 'function()' syntax to allow for 'this' binding.\n */\nexport const Period = looseIndex()({\n 'mid[ -]?night': '24:00',\n 'morning': '8:00',\n 'mid[ -]?morning': '10:00',\n 'mid[ -]?day': '12:00',\n 'noon': '12:00',\n 'after[ -]?noon': '3:00pm',\n 'evening': '18:00',\n 'night': '20:00',\n});\n/**\n * a {timeZone} alias dictionary mapping common abbreviations to IANA strings.\n * Tempo will check this registry to convert abbreviations before passing them to Temporal.\n */\nexport const TimeZone = looseIndex()({\n 'utc': 'UTC',\n 'gmt': 'Europe/London',\n 'est': 'America/New_York',\n 'cst': 'America/Chicago',\n 'mst': 'America/Denver',\n 'pst': 'America/Los_Angeles',\n 'aest': 'Australia/Sydney',\n 'acst': 'Australia/Adelaide',\n 'awst': 'Australia/Perth',\n 'nzt': 'Pacific/Auckland',\n 'cet': 'Europe/Paris',\n 'eet': 'Europe/Helsinki',\n 'ist': 'Asia/Kolkata',\n 'npt': 'Asia/Kathmandu',\n 'jst': 'Asia/Tokyo',\n});\n/** Reasonable default options for initial Tempo config */\nexport const Default = secure({\n /** log to console */ debug: false,\n /** catch or throw Errors */ catch: false,\n /** used to parse two-digit years*/ pivot: 75, /** @link https://en.wikipedia.org/wiki/Date_windowing */\n /** precision to measure timestamps (ms | us) */ timeStamp: 'ms',\n /** calendaring system */ calendar: 'iso8601',\n /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https://en.wikipedia.org/wiki/Date_format_by_country */\n /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']],\n});\n//# sourceMappingURL=tempo.default.js.map","import { asString } from '#core/shared/coercion.library.js';\nimport { extract } from '#core/shared/object.library.js';\nimport { ownEntries } from '#core/shared/reflection.library.js';\nimport { stringify } from '#core/shared/serialize.library.js';\nimport { isNumber, isDate, isTempo, isObject, isDefined, isUndefined, isFunction, nullToValue } from '#core/shared/type.library.js';\n// adapted from https://jsbin.com/insert/4/edit?js,output\n/** insert a value into an Array by its sorted position */\nexport const sortInsert = (arr = [], val, key) => {\n const obj = isObject(val) && isDefined(key); // array of Objects\n let low = 0, high = arr.length;\n while (low < high) {\n const mid = (low + high) >>> 1; // divide by 2\n const source = obj\n ? arr[mid][key] // array of Object values\n : arr[mid]; // assume Primitive values\n const target = obj\n ? val[key]\n : val;\n if (source < target)\n low = mid + 1;\n else\n high = mid;\n }\n arr.splice(low, 0, val); // mutate original Array\n return arr;\n};\n/** provide a sort-function to order a set of keys */\nexport function sortBy(...keys) {\n const sortOptions = keys // coerce string => SortBy\n .flat() // flatten Array-of-Array\n .map(key => isObject(key) ? key : { field: stringify(key) }); // build Array of sort-options\n return (left, right) => {\n let result = 0; // 0 = same, -1 = leftright\n sortOptions.forEach(key => {\n if (result === 0) { // no need to look further if result !== 0\n const dir = key.dir === 'desc' ? -1 : 1;\n const field = key.field + (key.index ? `[${key.index}]` : '');\n const valueA = extract(left, field, nullToValue(key.default, 0));\n const valueB = extract(right, field, nullToValue(key.default, 0));\n switch (true) {\n case isNumber(valueA) && isNumber(valueB):\n case isDate(valueA) && isDate(valueB):\n case isTempo(valueA) && isTempo(valueB):\n result = dir * (valueA - valueB);\n break;\n default:\n result = dir * asString(valueA)?.localeCompare(asString(valueB));\n break;\n }\n }\n });\n return result;\n };\n}\n/** return an array sorted-by a series of keys */\nexport function sortKey(array, ...keys) {\n return array.sort(sortBy(...keys));\n}\nexport function byKey(arr, fnKey, ...keys) {\n if (isFunction(fnKey))\n return Object.groupBy(arr, fnKey);\n const keyed = [fnKey] // mapFn is a keyof T\n .concat(keys) // append any trailing keyof T[]\n .flat(); // flatten Array-of-Array\n return Object.groupBy(arr, itm => // group an array into an object with named keys\n keyed\n .map(key => isUndefined(itm[key]) ? '' : stringify(itm[key]))\n .join('.'));\n}\nexport function byLkp(arr, fnKey, ...keys) {\n const group = isFunction(fnKey)\n ? byKey(arr, fnKey) // group by the callback function\n : byKey(arr, fnKey, ...keys); // group by the list of keys\n return ownEntries(group)\n .reduce((acc, [key, grp]) => Object.assign(acc, { [key]: grp?.pop() }), {});\n}\n//# sourceMappingURL=array.library.js.map","import { trimAll, toProperCase } from '#core/shared/string.library.js';\nimport { byKey, byLkp, sortKey } from '#core/shared/array.library.js';\nimport { asArray } from '#core/shared/coercion.library.js';\n// Prototype extensions\n// Remember to define any imports as a Function Declaration (not a Function Expression)\n// so that they are 'hoisted' prior to extending a prototype\n/**\n * extend an Object's prototype to include new method, if no clash\n */\nexport const patch = (proto, property, method) => {\n if (Object.hasOwn(proto.prototype, property)) { // if already defined,\n if (trimAll(method.toString()) !== trimAll(proto.prototype?.[property]?.toString()))\n console.warn(`${proto.name}.${property} already defined`); // show warning if different method definition\n }\n else {\n Object.defineProperty(proto.prototype, property, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: method,\n });\n }\n};\npatch(String, 'trimAll', function (pat) { return trimAll(this, pat); });\npatch(String, 'toProperCase', function () { return toProperCase(this); });\nfunction sorted(...keys) { return sortKey(this, ...keys); }\npatch(Array, 'orderBy', sorted); // order array by named keys\npatch(Array, 'sortBy', sorted); // sort array by named keys\nfunction keyed(...keys) { return byKey(this, ...keys); }\nfunction lookup(...keys) { return byLkp(this, ...keys); }\npatch(Array, 'keyedBy', keyed); // reduce array by named keys\npatch(Array, 'lookupBy', lookup); // reduce array by named keys, only one entry per key\npatch(Array, 'tap', function (fn) {\n fn(this); // run an arbitrary function\n return this; // then return the original array\n});\npatch(Array, 'clear', function () {\n this.fill(null).length = 0; // wipe the contents, then set the 'length' to zero\n return this;\n});\npatch(Array, 'distinct', function (mapfn) {\n return mapfn\n ? this.map(mapfn).distinct() // run the mapping selector, then recurse\n : Array.from(new Set(this)); // eliminate duplicates\n});\npatch(Array, 'cartesian', function (...args) {\n const [a, b = [], ...c] = args.length === 0 ? this : args;\n const cartFn = (a, b) => asArray([]).concat(...a.map(d => b.map(e => asArray([]).concat(d, e))));\n return b.length\n ? this.cartesian(cartFn(a, b), ...c) // run the cartFn function, then recurse\n : asArray(a || []); // return the collated result\n});\n//# sourceMappingURL=prototype.library.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport '#core/temporal.polyfill.js'; // side-effect runtime check for Temporal\n// #region library modules~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { Logify } from '#core/shared/logify.class.js';\nimport { ifDefined } from '#core/shared/object.library.js';\nimport { secure } from '#core/shared/utility.library.js';\nimport { Immutable, Serializable } from '#core/shared/class.library.js';\nimport { asArray, asNumber, asInteger, isNumeric, ifNumeric } from '#core/shared/coercion.library.js';\nimport { cleanify, stringify } from '#core/shared/serialize.library.js';\nimport { getStorage, setStorage } from '#core/shared/storage.library.js';\nimport { ownKeys, ownEntries, getAccessors, omit } from '#core/shared/reflection.library.js';\nimport { getProxy } from '#core/shared/proxy.library.js';\nimport { getContext, CONTEXT } from '#core/shared/utility.library.js';\nimport { pad, singular, toProperCase, trimAll } from '#core/shared/string.library.js';\nimport { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#core/shared/type.library.js';\nimport * as enums from '#core/tempo.config/tempo.enum.js';\nimport registerTerms from '#core/tempo.config/terms/term.import.js';\nimport { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#core/tempo.config/tempo.default.js';\nimport '#core/shared/prototype.library.js'; // patch prototypes\n// #region Const variables\n/** key to use for storage / globalThis Symbol */ export const $Tempo = Symbol.for('$Tempo');\n/** current execution context*/ const Context = getContext();\n// #endregion Const variables\n/**\n * # Tempo\n * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects.\n * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API.\n */\nlet Tempo = (() => {\n var _a, _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_conformToGroups;\n let _classDecorators = [Serializable, Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Tempo = _a = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Tempo\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Tempo = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n // #region Static enum properties~~~~~~~~~~~~~~~~~~~~~~~~~\n /** Weekday names (short-form) */ static get WEEKDAY() { return enums.WEEKDAY; }\n /** Weekday names (long-form) */ static get WEEKDAYS() { return enums.WEEKDAYS; }\n /** Month names (short-form) */ static get MONTH() { return enums.MONTH; }\n /** Month names (long-form) */ static get MONTHS() { return enums.MONTHS; }\n /** Time durations as seconds (singular) */ static get DURATION() { return enums.DURATION; }\n /** Time durations as milliseconds (plural) */ static get DURATIONS() { return enums.DURATIONS; }\n /** Quarterly Seasons */ static get SEASON() { return enums.SEASON; }\n /** Compass cardinal points */ static get COMPASS() { return enums.COMPASS; }\n /** Tempo to Temporal DateTime Units map */ static get ELEMENT() { return enums.ELEMENT; }\n /** Pre-configured format {name -> string} pairs */ static get FORMAT() { return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.formats; }\n /** some useful Dates */ static get LIMIT() { return enums.LIMIT; }\n static {\n // #endregion\n // #region Static private properties~~~~~~~~~~~~~~~~~~~~~~\n _Tempo_dbg = { value: new Logify('Tempo', {\n debug: Default?.debug ?? false,\n catch: Default?.catch ?? false\n }) };\n }\n static {\n /** Tempo state for the global configuration */ _Tempo_global = { value: {} };\n }\n static {\n /** a collection of parse rule-matches */ _Tempo_pending = { value: void 0 };\n }\n static {\n /** cache for next-available 'usr' Token key */ _Tempo_usrCount = { value: 0 };\n }\n static {\n /** mutable list of registered term plugins */ _Tempo_terms = { value: [] };\n }\n static {\n /** try to infer hemisphere using the timezone's daylight-savings setting */\n _Tempo_setSphere = { value: (shape, options) => {\n if (isUndefined(shape.config.timeZone) || __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, options, 'sphere'))\n return shape.config.sphere; // already specified or no timeZone to calculate from\n // use a fixed date (2024-01-01) to compare offsets for hemisphere detection\n const zdt = new Temporal.ZonedDateTime(BigInt(1_704_067_200) * BigInt(1_000_000_000), shape.config.timeZone);\n const jan = zdt.with({ day: 1, month: 1 }).offsetNanoseconds;\n const jun = zdt.with({ day: 1, month: 6 }).offsetNanoseconds;\n const dst = Math.sign(jan - jun); // timeZone offset difference between Jan and Jun\n switch (dst) {\n case -1:\n return Tempo.COMPASS.North; // clock moves backward in Northern hemisphere\n case 1:\n return Tempo.COMPASS.South; // clock moves forward in Southern hemisphere\n case 0:\n default:\n return void 0; // timeZone does not observe DST\n }\n } };\n }\n static {\n /** properCase week-day / calendar-month */\n _Tempo_prefix = { value: (str) => toProperCase(String(str).substring(0, 3)) };\n }\n static {\n /** get first Canonical name of a supplied locale */\n _Tempo_locale = { value: (locale) => {\n let language;\n try { // lookup locale\n language = Intl.getCanonicalLocales(locale.replace('_', '-'))[0];\n }\n catch (error) { } // catch unknown locale\n const global = Context.global;\n return language ??\n global?.navigator?.languages?.[0] ?? // fallback to current first navigator.languages[]\n global?.navigator?.language ?? // else navigator.language\n Default.locale ?? // else default locale\n locale; // cannot determine locale\n } };\n }\n // #endregion Static private methods\n // #region Static public methods~~~~~~~~~~~~~~~~~~~~~~~~~~\n /**\n * Bootstrap the library with a Custom Global Discovery object.\n *\n * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern\n * and automatically calls `Tempo.init()` to apply the discovered configuration.\n *\n * @param config - The Global Discovery object to register.\n * @returns The resolved global configuration.\n */\n static discover(config) {\n globalThis[$Tempo] = config;\n return this.init();\n }\n /**\n * Initializes the global default configuration for all subsequent `Tempo` instances.\n *\n * Settings are inherited in this priority:\n * 1. Reasonable library defaults (defined in tempo.config.js)\n * 2. Persistent storage (e.g. localStorage), if available.\n * 3. `options` provided to this method.\n *\n * @param options - Configuration overrides to apply globally.\n * @returns The resolved global configuration.\n */\n static init(options = {}) {\n if (isEmpty(options)) { // if no options supplied, reset all\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse = {\n snippet: Object.assign({}, Snippet),\n layout: Object.assign({}, Layout),\n event: Object.assign({}, Event),\n period: Object.assign({}, Period),\n mdyLocales: __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, Default.mdyLocales),\n mdyLayouts: asArray(Default.mdyLayouts),\n pivot: Default.pivot,\n };\n const { timeZone, calendar } = Intl.DateTimeFormat().resolvedOptions();\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config = Object.assign({}, omit({ ...Default }, ...enums.PARSE.keys()), // use Default as base, omit parse-related\n {\n calendar,\n timeZone,\n locale: __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_locale).call(Tempo),\n discovery: Symbol.keyFor($Tempo),\n formats: Object.create(enums.FORMAT),\n scope: 'global'\n });\n __classPrivateFieldSet(Tempo, _classThis, 0, \"f\", _Tempo_usrCount); // reset user-key counter\n for (const key of Object.keys(Token)) // purge user-allocated Tokens\n if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys\n delete Token[key];\n Tempo.addTerm(...registerTerms); // register built-in term plugins\n const storeKey = Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), $Tempo));\n }\n else {\n const discovery = options.discovery ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.discovery ?? Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), discovery), options);\n }\n if (Context.type === CONTEXT.Browser || options.debug === true)\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(Tempo.config, 'Tempo:', __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n return Tempo.config;\n }\n /** release global config and reset library to defaults */\n static [(_Tempo_proto = function _Tempo_proto(obj) { return Object.getPrototypeOf(obj); }, _Tempo_hasOwn = function _Tempo_hasOwn(obj, key) { return Object.hasOwn(obj, key); }, _Tempo_isLocal = function _Tempo_isLocal(shape) { return shape.config.scope === 'local'; }, _Tempo_create = function _Tempo_create(obj, name) { return Object.create(__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, obj)[name]); }, _Tempo_setEvents = function _Tempo_setEvents(shape) {\n const events = ownEntries(shape.parse.event, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'event') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'isMonthDay'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = events\n .map(([pat, _], idx) => `(?<${src}evt${idx}>${pat})`) // assign a number to the pattern\n .join('|'); // make an 'Or' pattern for the event-keys\n if (groups) {\n const protoEvt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.evt]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoEvt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.evt, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n if (shape.parse.isMonthDay) {\n const protoDt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.layout)[Token.dt];\n const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})';\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || localDt !== protoDt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n shape.parse.layout = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'layout');\n Object.defineProperty(shape.parse.layout, Token.dt, {\n value: localDt,\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_setPeriods = function _Tempo_setPeriods(shape) {\n const periods = ownEntries(shape.parse.period, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'period'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = periods\n .map(([pat, _], idx) => `(?<${src}per${idx}>${pat})`) // {pattern} is the 1st element of the tuple\n .join('|'); // make an 'or' pattern for the period-keys\n if (groups) {\n const protoPer = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.per]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoPer) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.per, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_isMonthDay = function _Tempo_isMonthDay(shape) {\n const monthDay = [...asArray(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.mdyLocales)];\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales'))\n monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global)\n return monthDay.some(mdy => {\n const tzs = mdy.timeZones ?? mdy.getTimeZones?.() ?? [];\n return tzs.includes(shape.config.timeZone);\n });\n }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) {\n const layouts = ownEntries(shape.parse.layout); // get entries of Layout Record\n const swap = shape.parse.mdyLayouts; // get the swap-tuple\n let chg = false; // no need to rebuild, if no change\n swap\n .forEach(([dmy, mdy]) => {\n const idx1 = layouts.findIndex(([key]) => key.description === dmy); // 1st swap element exists in {layouts}\n const idx2 = layouts.findIndex(([key]) => key.description === mdy); // 2nd swap element exists in {layouts}\n if (idx1 === -1 || idx2 === -1)\n return; // no pair to swap\n const swap1 = (idx1 < idx2) && shape.parse.isMonthDay; // we prefer {mdy} and the 1st tuple was found earlier than the 2nd\n const swap2 = (idx1 > idx2) && !shape.parse.isMonthDay; // we dont prefer {mdy} and the 1st tuple was found later than the 2nd\n if (swap1 || swap2) { // since {layouts} is an array, ok to swap by-reference\n [layouts[idx1], layouts[idx2]] = [layouts[idx2], layouts[idx1]];\n chg = true;\n }\n });\n if (chg)\n shape.parse.layout = Object.fromEntries(layouts); // rebuild Layout in new parse order\n }, _Tempo_setConfig = function _Tempo_setConfig(shape, ...options) {\n const mergedOptions = Object.assign({}, ...options);\n if (isEmpty(mergedOptions)) // nothing to do\n return;\n if (mergedOptions.store) // check for local-storage\n Object.assign(mergedOptions, { ...Tempo.readStore(mergedOptions.store), ...mergedOptions });\n /** helper to normalize snippet/layout Options into the target Config */\n const collect = (target, value, convert) => {\n const itm = asType(value);\n target ??= {};\n switch (itm.type) {\n case 'Object':\n ownEntries(itm.value)\n .forEach(([k, v]) => target[Tempo.getSymbol(k)] = convert(v));\n break;\n case 'String':\n case 'RegExp':\n target[Tempo.getSymbol()] = convert(itm.value);\n break;\n case 'Array':\n itm.value.forEach(elm => collect(target, elm, convert));\n break;\n }\n };\n ownEntries(mergedOptions)\n .forEach(([optKey, optVal]) => {\n if (isUndefined(optVal))\n return; // skip undefined values\n const arg = asType(optVal);\n switch (optKey) {\n case 'snippet':\n case 'layout':\n case 'event':\n case 'period':\n // lazy-shadowing: only create local object if it doesn't already exist on local shape\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, optKey))\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, optKey);\n const rule = shape.parse[optKey];\n if (['snippet', 'layout'].includes(optKey)) {\n collect(rule, arg.value, v => optKey === 'snippet'\n ? isRegExp(v) ? v : new RegExp(v)\n : isRegExp(v) ? v.source : v);\n }\n else {\n asArray(arg.value)\n .forEach(elm => ownEntries(elm).forEach(([key, val]) => rule[key] = val));\n }\n break;\n case 'mdyLocales':\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, arg.value);\n break;\n case 'mdyLayouts': // these are the 'layouts' that need to swap parse-order\n shape.parse[optKey] = asArray(arg.value);\n break;\n case 'pivot':\n shape.parse[\"pivot\"] = Number(arg.value);\n break;\n case 'config':\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, shape, arg.value);\n break;\n case 'timeZone':\n const zone = String(arg.value).toLowerCase();\n shape.config.timeZone = TimeZone[zone] ?? arg.value;\n break;\n case 'formats':\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.config, 'formats'))\n shape.config.formats = shape.config.formats.extend({}); // shadow parent prototype\n if (isObject(arg.value))\n shape.config.formats = shape.config.formats.extend(arg.value);\n break;\n case 'discovery':\n shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal;\n break;\n case 'plugins':\n asArray(optVal).forEach(p => this.extend(p));\n break;\n case 'anchor':\n break; // internal anchor used for relativity parsing\n default: // else just add to config\n Object.assign(shape.config, { [optKey]: optVal });\n break;\n }\n });\n const isMonthDay = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isMonthDay).call(Tempo, shape);\n if (isMonthDay !== __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local'\n shape.parse.isMonthDay = isMonthDay;\n shape.config.sphere = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_setSphere).call(Tempo, shape, mergedOptions);\n if (isDefined(shape.parse.mdyLayouts))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_swapLayout).call(Tempo, shape);\n if (isDefined(shape.parse.event))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setEvents).call(Tempo, shape);\n if (isDefined(shape.parse.period))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPeriods).call(Tempo, shape);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPatterns).call(Tempo, shape); // setup Regex DateTime patterns\n }, _Tempo_mdyLocales = function _Tempo_mdyLocales(value) {\n return asArray(value)\n .map(mdy => new Intl.Locale(mdy))\n .map(mdy => ({ locale: mdy.baseName, timeZones: mdy.getTimeZones?.() ?? [] }));\n }, _Tempo_setDiscovery = function _Tempo_setDiscovery(shape, key = shape.config.discovery ?? $Tempo) {\n const sym = isString(key) ? Symbol.for(key) : key;\n const discovery = globalThis[sym];\n if (!isObject(discovery))\n return {};\n // 1. Process TimeZones (normalize to lowercase for lookup)\n const timeZones = discovery.timeZones ?? {};\n for (const [key, value] of Object.entries(timeZones))\n TimeZone[key.toLowerCase()] = value;\n // 2. Process Terms\n if (discovery.terms)\n Tempo.addTerm(...asArray(discovery.terms));\n // 3. Process Formats\n if (discovery.formats)\n shape.config.formats = shape.config.formats.extend(discovery.formats);\n // 4. Process Plugins\n if (discovery.plugins)\n asArray(discovery.plugins).forEach(p => this.extend(p));\n // 4. Process Options\n let opts = discovery.options || {};\n return isFunction(opts) ? opts() : opts;\n }, _Tempo_setPatterns = function _Tempo_setPatterns(shape) {\n const snippet = shape.parse.snippet;\n // if local and no snippet or layout overrides, we can just use the prototype's patterns\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n return;\n // ensure we have our own Map to mutate (shadow if local)\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'pattern'))\n shape.parse.pattern = new Map();\n shape.parse.pattern.clear(); // reset {pattern} Map\n for (const [sym, layout] of ownEntries(shape.parse.layout, true))\n shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet));\n }, Symbol.dispose)]() { Tempo.init(); }\n /**\n * Extends the Tempo class with new functionality.\n * Plugins can add static or instance methods to the library.\n */\n static extend(plugin, options) {\n const p = plugin;\n if (!p.installed) {\n p(options, this, (val) => new this(val));\n p.installed = true;\n }\n return this;\n }\n /** Reads options from persistent storage (e.g., localStorage). */\n static readStore(key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return getStorage(key, {});\n }\n /** Writes configuration into persistent storage. */\n static writeStore(config, key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return setStorage(key, config);\n }\n /** lookup or registers a new `Symbol` for a given key. */\n static getSymbol(key) {\n var _b, _c;\n if (isUndefined(key)) {\n const usr = `usr.${__classPrivateFieldSet(_b = Tempo, _classThis, (_c = __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_usrCount), ++_c), \"f\", _Tempo_usrCount)}`; // allocate a prefixed 'user' key\n return Token[usr] = Symbol(usr); // add to Symbol register\n }\n if (isSymbol(key))\n return key;\n if (isString(key) && key.includes('.')) {\n const description = key.split('.').pop(); // use last segment as description\n return Token[key] ??= Symbol(description);\n }\n return Token[key] ?? Symbol.for(`$Tempo.${key}`);\n }\n /** translates {layout} into an anchored, case-insensitive RegExp. */\n static regexp(layout, snippet) {\n // helper function to replace {name} placeholders with their corresponding snippets\n function matcher(str, depth = 0) {\n if (depth > 12)\n return isRegExp(str) ? str.source : str; // depth guard\n let source = isRegExp(str) ? str.source : str;\n if (isRegExpLike(source)) // string that looks like a RegExp\n source = source.substring(1, source.length - 1); // remove the leading/trailing \"/\"\n if (source.startsWith('^') && source.endsWith('$'))\n source = source.substring(1, source.length - 1); // remove the leading/trailing anchors (^ $)\n return source.replace(Match.braces, (match, name) => {\n const token = Tempo.getSymbol(name); // get the symbol for this {name}\n const customs = snippet?.[token]?.source ?? snippet?.[name]?.source;\n const globals = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[token]?.source ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[name]?.source;\n const layout = Layout[token]; // get resolution source (layout)\n let res = customs ?? globals ?? layout; // get the snippet/layout source\n if (isNullish(res) && name.includes('.')) { // if no definition found, try fallback\n const prefix = name.split('.')[0]; // get the base token name\n const pToken = Tempo.getSymbol(prefix);\n res = snippet?.[pToken]?.source ?? snippet?.[prefix]?.source\n ?? Snippet[pToken]?.source ?? Snippet[prefix]?.source\n ?? Layout[pToken];\n }\n if (res && name.includes('.')) { // wrap dotted extensions for identification\n const safeName = name.replace(/\\./g, '_');\n if (!res.startsWith(`(?<${safeName}>`))\n res = `(?<${safeName}>${res})`;\n }\n return (isNullish(res) || res === match) // if no definition found,\n ? match // return the original match\n : matcher(res, depth + 1); // else recurse to see if snippet contains embedded \"{}\" pairs\n });\n }\n layout = matcher(layout); // initiate the layout-parse\n return new RegExp(`^(${layout})$`, 'i'); // translate the source into a regex\n }\n /** Compares two `Tempo` instances or date-time values. */\n static compare(tempo1, tempo2) {\n const one = new Tempo(tempo1), two = new Tempo(tempo2);\n return Number((one.nano > two.nano) || -(one.nano < two.nano)) + 0;\n }\n /** global Tempo configuration */\n static get config() {\n return getProxy(omit({ ...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config }, 'value'));\n }\n /** global discovery configuration */\n static get discovery() {\n const sym = Symbol.for(this.config.discovery);\n return getProxy(omit({ ...globalThis[sym], scope: 'discovery' }, 'value'));\n }\n /**\n * Returns a snapshot of the configuration layers used by Tempo.\n * Useful for debugging how the final configuration is built.\n */\n static get options() {\n const keyFor = this.config.store ?? Symbol.keyFor($Tempo);\n return {\n default: this.default,\n discovery: this.discovery,\n storage: getProxy(Object.assign({ key: keyFor, scope: 'storage' }, omit(Tempo.readStore(keyFor), 'value'))),\n global: this.config,\n };\n }\n static from(tempo, options) { return new this(tempo, options); }\n static now() { return Temporal.Now.instant().epochNanoseconds; }\n /** static Tempo.terms getter */\n static get terms() {\n return secure(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms)\n .map(({ define, ...rest }) => rest)); // omit the 'define' method\n }\n /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */\n static addTerm(...plugin) {\n asArray(plugin)\n .flat(1)\n .forEach(p => {\n if (!__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).some(t => t.key === p.key)) // check for duplicate key\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).push(p); // append; silently ignore duplicates\n });\n }\n /** static Tempo properties getter */\n static get properties() {\n return secure(getAccessors(Tempo)\n .filter(acc => getType(acc) !== 'Symbol')); // omit any Symbol properties\n }\n /** Tempo initial default settings */\n static get default() {\n return secure({ ...Default, scope: 'default', timeZone: TimeZone });\n }\n /**\n * configuration governing the static 'rules' used when parsing Tempo.DateTime argument\n */\n static get parse() {\n const parse = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse;\n return secure({\n ...parse, // spread primitives like {pivot}\n snippet: { ...parse.snippet }, // spread nested objects\n layout: { ...parse.layout },\n event: { ...parse.event },\n period: { ...parse.period },\n mdyLocales: [...parse.mdyLocales],\n mdyLayouts: [...parse.mdyLayouts],\n });\n }\n /** iterate over Tempo properties */\n static [(_Tempo_conformToGroups = function _Tempo_conformToGroups(tempo) {\n const groups = {};\n if ('year' in tempo) {\n groups.yy = tempo.year.toString().padStart(4, '0');\n groups.mm = tempo.month.toString().padStart(2, '0');\n groups.dd = tempo.day.toString().padStart(2, '0');\n }\n if ('hour' in tempo) {\n groups.hh = tempo.hour.toString().padStart(2, '0');\n groups.mi = tempo.minute.toString().padStart(2, '0');\n groups.ss = tempo.second.toString().padStart(2, '0');\n groups.ff = tempo.nanosecond.toString().padStart(9, '0');\n }\n return groups;\n }, Symbol.iterator)]() {\n return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters'\n }\n // #endregion Static public methods\n // #region Instance symbols~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** allow for auto-convert of Tempo to BigInt, Number or String */\n [Symbol.toPrimitive](hint) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.config, getType(this), '.hint: ', hint);\n switch (hint) {\n case 'string': return this.toString(); // ISO 8601 string\n case 'number': return this.epoch.ms; // Unix epoch (milliseconds)\n default: return this.nano; // Unix epoch (nanoseconds)\n }\n }\n /** iterate over instance formats */\n [Symbol.iterator]() {\n return ownEntries(this.#fmt)[Symbol.iterator](); // instance Iterator over tuple of FormatType[]\n }\n get [Symbol.toStringTag]() {\n return 'Tempo'; // hard-coded to avoid minification mangling\n }\n // #endregion Instance symbols\n // #region Instance properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** constructor tempo */ #tempo;\n /** constructor options */ #options = {};\n /** instantiation Temporal Instant */ #now;\n /** underlying Temporal ZonedDateTime */ #zdt;\n /** temporary anchor used during parsing */ #anchor;\n /** prebuilt formats, for convenience */ #fmt = {};\n /** instance term plugins */ #term = Object.create(null);\n /** instance values to complement static values */ #local = {\n /** instance configuration */ config: {},\n /** instance parse rules (only populated if provided) */ parse: { result: [] }\n };\n constructor(tempo, options = {}) {\n this.#now = Temporal.Now.instant(); // stash current Instant\n [this.#tempo, this.#options] = this.#swap(tempo, options); // swap arguments around, if arg1=Options or Temporal-like\n this.#setLocal(this.#options); // parse the local options looking for overrides to Tempo.#global.config\n // we now have all the info we need to instantiate a new Tempo\n try {\n this.#anchor = this.#options.anchor;\n this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg\n if (['iso8601', 'gregory'].includes(this.#local.config['calendar'])) {\n for (const key of this.#local.config.formats.keys())\n Object.assign(this.#fmt, { [key]: this.format(key) });\n }\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms) // add the plug-in getters for the pre-defined Terms to the instance\n .forEach(({ key, scope, define }) => {\n this.#setTerm(this, key, define, true); // add a getter which returns the key-field only\n this.#setTerm(this, scope, define, false); // add a getter which returns a range-object\n });\n if (isDefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) { // are we mutating with 'set()' ?\n this.#local.parse.result.unshift(...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending)); // prepend collected parse-matches\n __classPrivateFieldSet(Tempo, _classThis, void 0, \"f\", _Tempo_pending); // and reset mutating-flag\n }\n secure(this.#fmt); // prevent mutations\n secure(this.#term); // secure the initial object with getters\n secure(this.#local.config);\n secure(this.#local.parse);\n }\n catch (err) {\n console.error('Tempo Constructor Error:', err);\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.config, `Cannot create Tempo: ${err.message}\\n${err.stack}`);\n return {}; // return empty Object\n }\n }\n // This function has be defined within the Tempo class (and not imported from another module) because it references a private-variable\n /** this will add a getter on the instance #term private field */\n #setTerm(self, name, define, isKeyOnly) {\n if (isDefined(name) && isDefined(define)) {\n Object.defineProperty(self.#term, name, {\n configurable: false,\n enumerable: false,\n get: function () {\n const value = define.call(self, isKeyOnly); // evaluate the term range-lookup\n self.#term = secure(Object.create(self.#term, {\n [name]: {\n value,\n configurable: false,\n writable: false,\n enumerable: true\n }\n }));\n return secure(value);\n }\n });\n }\n }\n // #endregion Constructor\n // #region Instance public accessors~~~~~~~~~~~~~~~~~~~~~~\n /** 4-digit year (e.g., 2024) */ get yy() { return this.toDateTime().year; }\n /** 4-digit ISO week-numbering year */ get wy() { return this.ww === 1 && this.mm === Tempo.MONTH.Dec ? this.yy + 1 : (this.ww >= 52 && this.mm === Tempo.MONTH.Jan ? this.yy - 1 : this.yy); }\n /** Month number: Jan=1, Dec=12 */ get mm() { return this.toDateTime().month; }\n /** ISO week number of the year */ get ww() { return this.toDateTime().weekOfYear; }\n /** Day of the month (1-31) */ get dd() { return this.toDateTime().day; }\n /** Day of the month (alias for `dd`) */ get day() { return this.toDateTime().day; }\n /** Hour of the day (0-23) */ get hh() { return this.toDateTime().hour; }\n /** Minutes of the hour (0-59) */ get mi() { return this.toDateTime().minute; }\n /** Seconds of the minute (0-59) */ get ss() { return this.toDateTime().second; }\n /** Milliseconds of the second (0-999) */ get ms() { return this.toDateTime().millisecond; }\n /** Microseconds of the millisecond (0-999) */ get us() { return this.toDateTime().microsecond; }\n /** Nanoseconds of the microsecond (0-999) */ get ns() { return this.toDateTime().nanosecond; }\n /** Fractional seconds (e.g., 0.123456789) */ get ff() { return +(`0.${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`); }\n /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz() { return this.toDateTime().timeZoneId; }\n /** Unix timestamp (defaults to milliseconds) */ get ts() { return this.epoch[this.#local.config.timeStamp]; }\n /** Short month name (e.g., 'Jan') */ get mmm() { return Tempo.MONTH.keyOf(this.#zdt.month); }\n /** Full month name (e.g., 'January') */ get mon() { return Tempo.MONTHS.keyOf(this.#zdt.month); }\n /** Short weekday name (e.g., 'Mon') */ get www() { return Tempo.WEEKDAY.keyOf(this.#zdt.dayOfWeek); }\n /** Full weekday name (e.g., 'Monday') */ get wkd() { return Tempo.WEEKDAYS.keyOf(this.toDateTime().dayOfWeek); }\n /** ISO weekday number: Mon=1, Sun=7 */ get dow() { return this.toDateTime().dayOfWeek; }\n /** Nanoseconds since Unix epoch (BigInt) */ get nano() { return this.toDateTime().epochNanoseconds; }\n /** current Tempo configuration */\n get config() {\n return getProxy(omit({ ...this.#local.config }, 'scope', 'value', 'anchor'));\n }\n /** Instance-specific parse rules (merged with global) */ get parse() { return this.#local.parse; }\n /** Object containing results from all term plugins */ get term() { return getProxy(this.#term); }\n /** Formatted results for all pre-defined format codes */ get fmt() { return this.#fmt; }\n /** units since epoch */ get epoch() {\n return secure({\n /** seconds since epoch */ ss: Math.trunc(this.toDateTime().epochMilliseconds / 1_000),\n /** milliseconds since epoch */ ms: this.toDateTime().epochMilliseconds,\n /** microseconds since epoch */ us: Number(this.toDateTime().epochNanoseconds / BigInt(1_000)),\n /** nanoseconds since epoch */ ns: this.toDateTime().epochNanoseconds,\n });\n }\n // #endregion Instance public accessors\n // #region Instance private accessors\n /**\n * @Immutable class decorators wrap the class but leave internal lexical bindings pointing to the original, undecorated class.\n * To ensure new instances returned by instance methods are properly frozen,\n * we must instantiate internally from the decorated wrapper (which is bound to `this.constructor`)\n * rather than using `new Tempo(..)`.\n */\n get #Tempo() { return this.constructor; }\n /** time duration until another date-time */ until(optsOrDate, optsOrUntil) { return this.#until(optsOrDate, optsOrUntil); }\n /** time elapsed since another date-time */ since(optsOrDate, optsOrUntil) { return this.#since(optsOrDate, optsOrUntil); }\n /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt) { return this.#format(fmt); }\n /** returns a new `Tempo` with specific duration added. */ add(tempo, options) { return this.#add(tempo, options); }\n /** returns a new `Tempo` with specific offsets. */ set(tempo, options) { return this.#set(tempo, options); }\n /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config); }\n /** returns the underlying Temporal.ZonedDateTime */ toDateTime() { return this.#zdt ?? this.#anchor ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone); }\n /** returns a Temporal.PlainDate representation */ toPlainDate() { return this.toDateTime().toPlainDate(); }\n /** returns a Temporal.PlainTime representation */ toPlainTime() { return this.toDateTime().toPlainTime(); }\n /** returns a Temporal.PlainDateTime representation */ toPlainDateTime() { return this.toDateTime().toPlainDateTime(); }\n /** returns the underlying Temporal.Instant */ toInstant() { return this.toDateTime().toInstant(); }\n /** the date-time as a standard `Date` object. */ toDate() { return new Date(this.toDateTime().round({ smallestUnit: enums.ELEMENT.ms }).epochMilliseconds); }\n /** the ISO8601 string representation of the date-time. */ toString() { return this.toPlainDateTime().toString({ calendarName: 'never' }); }\n /** Custom JSON serialization for `JSON.stringify`. */ toJSON() { return omit({ ...this.#local.config, value: this.toString() }, 'scope', 'store'); }\n /** `true` if the underlying date-time is valid. */ isValid() { return !isEmpty(this); }\n // #endregion Instance public methods\n // #region Instance private methods~~~~~~~~~~~~~~~~~~~~~~~\n /** setup local 'config' and 'parse' rules (prototype-linked to global) */\n #setLocal(options) {\n // setup local config (prototype-linked to global config)\n this.#local.config = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n Object.assign(this.#local.config, { scope: 'local' });\n // setup local parse rules (prototype-linked to global parse)\n this.#local.parse = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse);\n this.#local.parse.result = [];\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, this.#local, options); // set #local config\n }\n /** parse DateTime input */\n #parse(tempo, dateTime) {\n const today = (dateTime ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone))\n .withTimeZone(this.#local.config.timeZone);\n const { type, value } = this.#conform(tempo, today, isDefined(dateTime));\n // evaluate latest timezone / calendar (after #conform which might have updated them)\n const { timeZone, calendar } = this.#local.config;\n const tz = isString(timeZone) ? timeZone : timeZone.id ?? timeZone.timeZoneId;\n const cal = isString(calendar) ? calendar : calendar.id ?? calendar.calendarId;\n if (isEmpty(this.#local.parse.result) && isUndefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) // #conform() didn't find any matches\n this.#local.parse.result = [{ type, value }];\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'parse', `{type: ${type}, value: ${value}}`); // show what we're parsing\n switch (type) {\n case 'Null':\n case 'Void':\n case 'Empty':\n case 'Undefined':\n return today;\n case 'String': // String which didn't conform to a Tempo.pattern\n try {\n const str = value.replace(/Z$/, ''); // requested Z-stripping for adoption\n const zdt = Temporal.ZonedDateTime.from(str.includes('[') ? str : `${str}[${tz}]`);\n if (this.#local)\n this.#local.config.timeZone = zdt.timeZoneId;\n return zdt;\n }\n catch (err) { // else see if Date.parse can parse value\n this.#result({ type: 'String', value }, { match: 'Date.parse' });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, 'Cannot detect DateTime; fallback to Date.parse');\n if (Match.date.test(value)) {\n try {\n return Temporal.PlainDate.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback */ }\n }\n try {\n return Temporal.PlainDateTime.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback to Date.parse */ }\n const date = new Date(value.toString());\n if (isNaN(date.getTime()))\n return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot parse Date: \"${value}\"`);\n return Temporal.ZonedDateTime // adopt instance timezone\n .from(`${date.toISOString().substring(0, 23)}[${tz}]`)\n .withCalendar(cal);\n }\n case 'Temporal.ZonedDateTime': // ZonedDateTime object: convert to instance timezone\n return (value.timeZoneId === tz && value.calendarId === cal)\n ? value\n : value.withTimeZone(tz).withCalendar(cal);\n case 'Temporal.PlainDate':\n case 'Temporal.PlainDateTime':\n return value\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainTime':\n return today.withPlainTime(value);\n case 'Temporal.PlainYearMonth': // assume current day, else end-of-month\n return value\n .toPlainDate({ day: Math.min(today.day, value.daysInMonth) })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainMonthDay': // assume current year\n return value\n .toPlainDate({ year: today.year })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.Instant':\n return value\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Tempo':\n return value\n .toDateTime()\n .withTimeZone(tz)\n .withCalendar(cal); // apply instance timezone to cloned Tempo\n case 'Date':\n return Temporal.Instant.fromEpochMilliseconds(value.getTime())\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Number': // Number which didn't conform to a Tempo.pattern\n const [seconds = BigInt(0), suffix = BigInt(0)] = value.toString().split('.').map(BigInt);\n const nano = BigInt(suffix.toString().substring(0, 9).padEnd(9, '0'));\n return Temporal.Instant.fromEpochNanoseconds(seconds * BigInt(1_000_000_000) + nano)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'BigInt': // BigInt is not conformed against a Tempo.pattern\n return Temporal.Instant.fromEpochNanoseconds(value)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected Tempo parameter type: ${type}, ${String(value)}`);\n return today;\n }\n }\n /** resolve constructor / method arguments */\n #swap(tempo, options = {}) {\n return this.#isOptions(tempo)\n ? [tempo.value, { ...tempo }]\n : [tempo, { ...options }];\n }\n /** check if we've been given a Tempo Options object */\n #isOptions(arg) {\n if (!isObject(arg) || arg.constructor !== Object)\n return false;\n const keys = ownKeys(arg); // if it contains any 'mutation' keys, then it's not (just) an options object\n if (keys.some(key => enums.MUTATION.has(key)))\n return false;\n return keys\n .some(key => enums.OPTION.has(key));\n }\n /** check if we've been given a ZonedDateTimeLike object */\n #isZonedDateTimeLike(tempo) {\n if (!isObject(tempo) || isEmpty(tempo))\n return false;\n // if it contains any 'options' keys, it's not a ZonedDateTime\n const keys = ownKeys(tempo);\n if (keys.some(key => enums.OPTION.has(key) && key !== 'value'))\n return false;\n // we include {value} to allow for Tempo instances\n return keys\n .filter(isString)\n .every((key) => enums.ZONED_DATE_TIME.has(key));\n }\n #result(...rest) {\n const match = Object.assign({}, ...rest); // collect all object arguments\n if (!isEmpty(match.groups)) {\n if (isDefined(this.#anchor) && !match.isAnchored)\n match.isAnchored = true;\n (__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending) ?? this.#local.parse.result).push(match);\n }\n }\n /** evaluate 'string | number' input against known patterns */\n #conform(tempo, dateTime, isAnchored = false) {\n const arg = asType(tempo);\n const { type, value } = arg;\n if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property)\n const { timeZone, calendar, value, ...options } = tempo;\n let zdt = !isEmpty(options)\n ? dateTime.with({ ...options })\n : dateTime;\n if (timeZone)\n zdt = zdt.withTimeZone(timeZone); // optionally set timeZone\n if (calendar)\n zdt = zdt.withCalendar(calendar); // optionally set calendar\n this.#result({ type: 'Temporal.ZonedDateTimeLike', value: zdt, match: 'Temporal.ZonedDateTimeLike' });\n return Object.assign(arg, {\n type: 'Temporal.ZonedDateTime', // override {arg.type}\n value: zdt,\n });\n }\n if (type !== 'String' && type !== 'Number') {\n this.#result(arg, { match: type });\n return arg;\n }\n if (isFunction(value)) {\n const res = value.call(this);\n return this.#conform(res, dateTime, isAnchored);\n }\n const trim = trimAll(value);\n if (type === 'String') { // if original value is String\n if (isEmpty(trim)) { // don't conform empty string\n this.#result(arg, { match: 'Empty' });\n return Object.assign(arg, { type: 'Empty' });\n }\n if (isIntegerLike(trim)) { // if string representation of BigInt literal\n this.#result(arg, { match: 'BigInt' });\n return Object.assign(arg, { type: 'BigInt', value: asInteger(trim) });\n }\n }\n else { // else it is a Number\n if (trim.length <= 7) { // cannot reliably interpret small numbers: might be {ss} or {yymmdd} or {dmmyyyy}\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, 'Cannot safely interpret number with less than 8-digits: use string instead');\n return arg;\n }\n }\n // const isSimpleIsoOrNumeric = typeof value === 'string' && (Match.date.test(value) || /^\\d+$/.test(value));\n const map = this.#local.parse.pattern;\n for (const [sym, pat] of map) {\n const groups = this.#parseMatch(pat, trim); // determine pattern-match groups\n if (isEmpty(groups))\n continue; // no match, so skip this iteration\n this.#result(arg, { match: sym.description, groups: cleanify(groups) }); // stash the {key} of the pattern that was matched\n dateTime = this.#parseZone(groups, dateTime); // resolve timezone early so events can use it\n dateTime = this.#parseGroups(groups, dateTime); // mutate the {groups} object (resolves events/periods)\n dateTime = this.#parseWeekday(groups, dateTime); // if {weekDay} pattern, calculate a calendar value\n dateTime = this.#parseDate(groups, dateTime); // if {calendar}|{event} pattern, translate to date value\n dateTime = this.#parseTime(groups, dateTime); // if {clock}|{period} pattern, translate to a time value\n /**\n * finished analyzing a matched pattern.\n * rebuild {arg.value} into a ZonedDateTime\n */\n // if no time-components were matched, strip time to midnight baseline\n if (!isAnchored && !['hh', 'mi', 'ss', 'ff', 'mer', 'per'].some(key => isDefined(groups[key])))\n dateTime = dateTime.withPlainTime('00:00:00');\n Object.assign(arg, { type: 'Temporal.ZonedDateTime', value: dateTime });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'groups', groups); // show the resolved date-time elements\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'pattern', sym.description); // show the pattern that was matched\n break; // stop checking patterns\n }\n return arg;\n }\n /** apply a regex-match against a value, and clean the result */\n #parseMatch(pat, value) {\n const groups = value.toString().match(pat)?.groups || {};\n ownEntries(groups) // remove undefined, NaN, null and empty values\n .forEach(([key, val]) => isEmpty(val) && delete groups[key]);\n return groups;\n }\n /** resolve {event} | {period} to their date | time values (mutates groups) */\n #parseGroups(groups, dateTime) {\n this.#anchor = dateTime; // temporarily anchor the instance so events resolve relative to current state\n try {\n for (const key of ownKeys(groups)) {\n const isEvent = Match.event.test(key);\n const isPeriod = Match.period.test(key);\n if (!isEvent && !isPeriod)\n continue;\n const idx = +key.substring(4);\n const src = key.startsWith('g') ? (isEvent ? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.event : __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.period) : (isEvent ? this.#local.parse.event : this.#local.parse.period);\n const entry = ownEntries(src, true)[idx];\n if (!entry)\n continue;\n const definition = entry[1];\n const res = isFunction(definition) ? definition.call(this).toString() : definition;\n const resGroups = isEvent ? this.#parseEvent(res) : this.#parsePeriod(res);\n Object.assign(groups, resGroups);\n delete groups[key];\n }\n }\n finally {\n this.#anchor = void 0; // reset anchor\n }\n // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date)\n if (isDefined(groups[\"mm\"]) && !isNumeric(groups[\"mm\"])) {\n const mm = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, groups[\"mm\"]); // conform month-name\n groups[\"mm\"] = Tempo.MONTH.keys().findIndex((el) => el === mm).toString().padStart(2, '0');\n }\n // Apply mutated groups to dateTime\n if (isDefined(groups.yy) || isDefined(groups.mm) || isDefined(groups.dd))\n dateTime = this.#parseDate(groups, dateTime);\n if (isDefined(groups.hh) || isDefined(groups.mi) || isDefined(groups.ss) || isDefined(groups.ff) || isDefined(groups.mer))\n dateTime = this.#parseTime(groups, dateTime);\n return dateTime;\n }\n /**\n * We expect similar offset-logic to apply to 'modifiers' when parsing a string DateTime.\n * returns {adjust} to make, based on {modifier}, {offset}, and {period}\n * -\t\t\tprevious period\n * +\t\t\tnext period\n * -3\t\t\tthree periods ago\n * <\t\t\tprior to base-date (asIs)\n * <=\t\t\tprior to base-date (plus one)\n */\n #parseModifier({ mod, adjust, offset, period }) {\n adjust = Math.abs(adjust);\n switch (mod) {\n case void 0: // no adjustment\n case '=':\n case 'this': // current period\n return 0;\n case '+': // next period\n case 'next':\n return adjust;\n case '-': // previous period\n case 'prev':\n case 'last':\n return -adjust;\n case '<': // period before base-date\n case 'ago':\n return (period <= offset)\n ? -adjust\n : -(adjust - 1);\n case '<=': // period before or including base-date\n return (period < offset)\n ? -adjust\n : -(adjust - 1);\n case '>': // period after base-date\n case 'hence':\n return (period > offset)\n ? adjust\n : (adjust - 1);\n case '>=': // period after or including base-date\n case '+=':\n return (period >= offset)\n ? adjust\n : (adjust - 1);\n default: // unexpected modifier\n return 0;\n }\n }\n /**\n * if named-group 'wkd' detected (with optional 'mod', 'nbr', 'sfx' or time-units), then calc relative weekday offset\n * | Example | Result | Note |\n * | :--- | :---- | :---- |\n * | `Wed` | Wed this week | might be earlier or later or equal to current day |\n * | `-Wed` | Wed last week | same as new Tempo('Wed').add({ weeks: -1 }) |\n * | `+Wed` | Wed next week | same as new Tempo('Wed').add({ weeks: 1 }) |\n * | `-3Wed` | Wed three weeks ago | same as new Tempo('Wed').add({ weeks: -3 }) |\n * | `', hh: '10', mer: 'pm'}\n * we early-exit if we find anything other than time-units\n */\n const time = ['hh', 'mi', 'ss', 'ms', 'us', 'ns', 'ff', 'mer'];\n if (!ownKeys(rest)\n .every(key => time.includes(key))) // non 'time-unit' keys detected\n return dateTime; // this is not a true {weekDay} pattern, so early-exit\n if (!isEmpty(mod) && !isEmpty(sfx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${sfx}'`);\n return dateTime; // cannot provide both 'modifier' and 'suffix'\n }\n const weekday = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, wkd); // conform weekday-name\n const adjust = +nbr; // how many weeks to adjust\n const offset = Tempo.WEEKDAY.keys() // how far weekday is from today\n .findIndex((el) => el === weekday);\n const days = offset - dateTime.dayOfWeek // number of days to offset from dateTime\n + (this.#parseModifier({ mod: mod ?? sfx, adjust, offset, period: dateTime.dayOfWeek }) * dateTime.daysInWeek);\n delete groups[\"wkd\"];\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"sfx\"];\n return dateTime\n .add({ days }); // set new {day}\n }\n /**\n * match input against date patterns\n * @returns adjusted ZonedDateTime with resolved time-components\n */\n #parseDate(groups, dateTime) {\n const { mod, nbr = '1', afx, unt, yy, mm, dd } = groups;\n if (isEmpty(yy) && isEmpty(mm) && isEmpty(dd) && isUndefined(unt))\n return dateTime; // return default\n if (!isEmpty(mod) && !isEmpty(afx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${afx}'`);\n return dateTime;\n }\n let { year, month, day } = this.#num({\n year: yy ?? dateTime.year, // supplied year, else current year\n month: mm ?? dateTime.month, // supplied month, else current month\n day: dd ?? dateTime.day, // supplied day, else current day\n });\n // handle {unt} relative offset (e.g. '2 days ago')\n if (unt) {\n const adjust = +nbr;\n const direction = (mod === '<' || mod === '-' || afx === 'ago') ? -1 : 1;\n const plural = singular(unt) + 's';\n dateTime = dateTime.add({ [plural]: adjust * direction });\n delete groups[\"unt\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n delete groups[\"mod\"];\n return dateTime;\n }\n // convert 2-digit year to 4-digits using 'pivot-year' (relative to current century)\n if (year.toString().match(Match.twoDigit)) { // if {year} match just-two digits\n const pivot = dateTime\n .subtract({ years: this.#local.parse[\"pivot\"] }) // pivot cutoff to determine century\n .year % 100; // remainder \n const century = Math.trunc(dateTime.year / 100); // current century\n year += (century - Number(year >= pivot)) * 100; // now a four-digit year\n }\n // adjust the {year} if a Modifier is present\n const adjust = +nbr; // how many years to adjust\n const offset = Number(pad(month) + '.' + pad(day)); // the event month.day\n const period = Number(pad(dateTime.month) + '.' + pad(dateTime.day + 1));\n year += this.#parseModifier({ mod: mod ?? afx, adjust, offset, period });\n Object.assign(groups, { yy: year, mm: month, dd: day });\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n // all date-components are now set; check for overflow in case past end-of-month\n return Temporal.PlainDate.from({ year, month, day }, { overflow: 'constrain' })\n .toZonedDateTime(dateTime.timeZoneId) // adjust to constrained date\n .withPlainTime(dateTime.toPlainTime()); // restore the time\n }\n /** match input against 'tm' pattern (returns adjusted ZonedDateTime) */\n #parseTime(groups = {}, dateTime) {\n if (isUndefined(groups[\"hh\"])) // must contain 'time' with at least {hh}\n return dateTime;\n let { hh = 0, mi = 0, ss = 0, ms = 0, us = 0, ns = 0 } = this.#num(groups);\n if (hh >= 24) {\n dateTime = dateTime.add({ days: Math.trunc(hh / 24) }); // move the date forward number of days to offset\t\t\t\t\t\t\t\t\n hh %= 24; // midnight is '00:00' on the next-day\n }\n if (isDefined(groups[\"ff\"])) { // {ff} is fractional seconds and overrides {ms|us|ns}\n const ff = groups[\"ff\"].substring(0, 9).padEnd(9, '0');\n ms = +ff.substring(0, 3);\n us = +ff.substring(3, 6);\n ns = +ff.substring(6, 9);\n }\n if (groups[\"mer\"]?.toLowerCase() === 'pm' && hh < 12 && (hh + mi + ss + ms + us + ns) > 0)\n hh += 12; // anything after midnight and before midday\n if (groups[\"mer\"]?.toLowerCase() === 'am' && hh >= 12)\n hh -= 12; // anything after midday\n return dateTime // return the computed time-values\n .withPlainTime({ hour: hh, minute: mi, second: ss, millisecond: ms, microsecond: us, nanosecond: ns });\n }\n /**\n * apply a timezone or calendar bracket to the current ZonedDateTime\n * normalization is applied to ensure 'Z' is treated as 'UTC'\n */\n #parseZone(groups, dateTime) {\n const tzd = groups[\"tzd\"]?.replace(Match.zed, 'UTC'); // normalize timezone/offset\n const brk = groups[\"brk\"]?.replace(Match.zed, 'UTC'); // handle bracketed timezone\n const zone = brk || tzd;\n if (zone && zone !== dateTime.timeZoneId && !zone.startsWith('u-ca=')) {\n if (this.#local)\n this.#local.config.timeZone = zone; // update local config if exists\n dateTime = dateTime.toPlainDateTime().toZonedDateTime(zone); // adopt timezone override (stable)\n }\n const cal = groups[\"cal\"];\n if (cal && cal !== dateTime.calendarId) {\n const calendar = cal.startsWith('u-ca=') ? cal.substring(5) : cal;\n this.#local.config.calendar = calendar;\n dateTime = dateTime.withCalendar(calendar);\n }\n delete groups[\"brk\"];\n delete groups[\"cal\"];\n delete groups[\"tzd\"];\n return dateTime;\n }\n /** match an {event} string against a date pattern */\n #parseEvent(evt) {\n const groups = {};\n const pats = this.#local.parse.isMonthDay // first find out if we have a US-format timeZone\n ? ['mdy', 'dmy', 'ymd'] // if so, try {mdy} before {dmy}\n : ['dmy', 'mdy', 'ymd']; // else try {dmy} before {mdy}\n for (const pat of pats) {\n const reg = this.#getPattern(pat);\n if (isDefined(reg)) {\n const match = this.#parseMatch(reg, evt);\n if (!isEmpty(match)) {\n this.#result({ type: 'Event', value: evt, match: pat, groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n if (!isEmpty(groups))\n break; // return on the first matched pattern\n }\n return groups; // overlay the match date-components\n }\n /** match a {period} string against the time pattern */\n #parsePeriod(per) {\n const groups = {};\n const tm = this.#getPattern('tm'); // get the RegExp for the time-pattern\n if (isDefined(tm)) {\n const match = this.#parseMatch(tm, per);\n if (!isEmpty(match)) {\n this.#result({ type: 'Period', value: per, match: 'tm', groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n return groups;\n }\n /** lookup the RegExp for a given pattern name */\n #getPattern(pat) {\n const reg = this.#local.parse.pattern.get(Tempo.getSymbol(pat));\n if (isUndefined(reg))\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot find pattern: \"${pat}\"`);\n return reg;\n }\n /** return a new object, with only numeric values */\n #num = (groups) => {\n return ownEntries(groups)\n .reduce((acc, [key, val]) => {\n if (isNumeric(val))\n acc[key] = asNumber(val);\n return acc;\n }, {});\n };\n /** mutate the date-time by adding a duration */\n #add = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n const mutate = 'add';\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [unit, offset]) => {\n if (unit === 'timeZone' || unit === 'calendar')\n return zdt;\n const single = singular(unit);\n const plural = single + 's';\n switch (`${mutate}.${single}`) {\n case 'add.year':\n case 'add.month':\n case 'add.week':\n case 'add.day':\n case 'add.hour':\n case 'add.minute':\n case 'add.second':\n case 'add.millisecond':\n case 'add.microsecond':\n case 'add.nanosecond':\n return zdt\n .add({ [plural]: offset });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`);\n return zdt;\n }\n }, zdt);\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n /** mutate the date-time by setting specific offsets */\n #set = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n if (args.timeZone)\n overrides.timeZone = args.timeZone;\n if (args.calendar)\n overrides.calendar = args.calendar;\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [key, adjust]) => {\n if (key === 'timeZone' || key === 'calendar')\n return zdt;\n const { mutate, offset, single } = ((key) => {\n switch (key) {\n case 'start':\n case 'mid':\n case 'end':\n return { mutate: key, offset: 0, single: singular(adjust?.toString() ?? '') };\n default:\n return { mutate: 'set', offset: adjust, single: singular(key) };\n }\n })(key); // IIFE to analyze arguments\n switch (`${mutate}.${single}`) {\n case 'set.timeZone':\n return zdt.withTimeZone(offset);\n case 'set.calendar':\n return zdt.withCalendar(offset);\n case 'set.period':\n case 'set.time':\n case 'set.date':\n case 'set.event':\n case 'set.dow': // set day-of-week by number\n case 'set.wkd': // set day-of-week by name\n return this.#parse(offset, zdt);\n case 'set.year':\n case 'set.month':\n // case 'set.week':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.day':\n case 'set.hour':\n case 'set.minute':\n case 'set.second':\n case 'set.millisecond':\n case 'set.microsecond':\n case 'set.nanosecond':\n return zdt\n .with({ [single]: offset });\n case 'set.yy':\n case 'set.mm':\n // case 'set.ww':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.dd':\n case 'set.hh':\n case 'set.mi':\n case 'set.ss':\n case 'set.ms':\n case 'set.us':\n case 'set.ns':\n const value = Tempo.ELEMENT[single];\n return zdt\n .with({ [value]: offset });\n case 'start.year':\n return zdt\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay();\n case 'start.term': // TODO\n return zdt;\n case 'start.month':\n return zdt\n .with({ day: 1 })\n .startOfDay();\n case 'start.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) })\n .startOfDay();\n case 'start.day':\n return zdt\n .startOfDay();\n case 'start.hour':\n case 'start.minute':\n case 'start.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'trunc' });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'mid.year':\n return zdt\n .with({ month: Tempo.MONTH.Jul, day: 1 })\n .startOfDay();\n case 'mid.term': // TODO: relevant?\n return zdt;\n case 'mid.month':\n return zdt\n .with({ day: Math.trunc(zdt.daysInMonth / 2) })\n .startOfDay();\n case 'mid.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) })\n .startOfDay();\n case 'mid.day':\n return zdt\n .round({ smallestUnit: 'day', roundingMode: 'trunc' })\n .add({ hours: 12 });\n case 'mid.hour':\n return zdt\n .round({ smallestUnit: 'hour', roundingMode: 'trunc' })\n .add({ minutes: 30 });\n case 'mid.minute':\n return zdt\n .round({ smallestUnit: 'minute', roundingMode: 'trunc' })\n .add({ seconds: 30 });\n case 'mid.second':\n return zdt\n .round({ smallestUnit: 'second', roundingMode: 'trunc' })\n .add({ milliseconds: 500 });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'end.year':\n return zdt\n .add({ years: 1 })\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.term': // TODO\n return zdt\n .subtract({ nanoseconds: 1 });\n case 'end.month':\n return zdt\n .add({ months: 1 })\n .with({ day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.week':\n return zdt\n .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.day':\n case 'end.hour':\n case 'end.minute':\n case 'end.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'ceil' })\n .subtract({ nanoseconds: 1 });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`);\n return zdt;\n }\n }, zdt); // start reduce with the shifted zonedDateTime\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n #format = (fmt) => {\n if (isNull(this.#tempo))\n return undefined; // don't format dates\n const obj = this.#local.config.formats;\n let template = (isString(fmt) && obj.has(fmt))\n ? obj[fmt]\n : String(fmt);\n // auto-meridiem: if {HH} is present and {mer} is absent, append it after the last time component\n if (template.includes('{HH}') && !template.includes('{mer}') && !template.includes('{MER}')) {\n const index = Math.max(template.lastIndexOf('{HH}'), template.lastIndexOf('{mi}'), template.lastIndexOf('{ss}'));\n if (index !== -1) {\n const end = template.indexOf('}', index) + 1;\n template = template.slice(0, end) + '{mer}' + template.slice(end);\n }\n }\n const result = template.replace(Match.braces, (_match, token) => {\n switch (token) {\n case 'wy': return pad(this.wy, 4);\n case 'yyww': return pad(this.wy, 4) + pad(this.ww);\n case 'yyyy': return pad(this.yy, 4);\n case 'yy': return pad(this.yy % 100);\n case 'mon': return this.mon;\n case 'mmm': return this.mmm;\n case 'mm': return pad(this.mm);\n case 'dd': return pad(this.dd);\n case 'day': return this.day.toString();\n case 'dow': return this.dow.toString();\n case 'wkd': return this.wkd;\n case 'www': return this.www;\n case 'ww': return pad(this.ww);\n case 'hh': return pad(this.hh);\n case 'HH': return pad(this.hh > 12 ? this.hh % 12 : this.hh || 12);\n case 'mer': return this.hh >= 12 ? 'pm' : 'am';\n case 'MER': return this.hh >= 12 ? 'PM' : 'AM';\n case 'mi': return pad(this.mi);\n case 'ss': return pad(this.ss);\n case 'ms': return pad(this.ms, 3);\n case 'us': return pad(this.us, 3);\n case 'ns': return pad(this.ns, 3);\n case 'ff': return `${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`;\n case 'hhmiss': return `${pad(this.hh)}${pad(this.mi)}${pad(this.ss)}`;\n case 'ts': return this.ts.toString();\n case 'nano': return this.nano.toString();\n case 'tz': return this.tz;\n default: {\n return token.startsWith('term.')\n ? stringify(this.term[token.slice(5)])\n : `{${token}}`; // unknown format-code, return as-is\n }\n }\n });\n const isExplicitlyNumeric = ['{yyyy}{ww}', '{yyyy}{mm}', '{yyyy}{mm}{dd}', '{yyww}', '{wy}{ww}', '{wy}'].includes(template);\n return (isExplicitlyNumeric ? ifNumeric(result) : result);\n };\n #until(arg, until = {}, since = false) {\n let value, opts = {}, unit;\n switch (true) {\n case isString(arg) && Tempo.ELEMENT.includes(singular(arg)):\n unit = arg; // e.g. tempo.until('hours')\n ({ value, ...opts } = until);\n break;\n case isString(arg): // assume 'arg' is a dateTime string\n value = arg; // e.g. tempo.until('20-May-1957', {unit: 'years'})\n if (isObject(until))\n ({ unit, ...opts } = until);\n else\n unit = until; // assume the 'until' arg is a 'unit' string\n break;\n case isObject(arg) && isString(until): // assume 'until' is a Unit\n unit = until; // e.g. tempo.until({value:'20-May-1957}, 'years'})\n ({ value, ...opts } = arg);\n break;\n case isObject(arg) && isObject(until): // assume combination of Tempo.Options and Tempo.Until\n ({ value, unit, ...opts } = Object.assign({}, arg, until));\n break;\n case isString(until):\n unit = until;\n value = arg;\n break;\n case isObject(until):\n unit = until.unit;\n value = arg;\n break;\n default:\n value = arg; // assume 'arg' is a DateTime\n }\n const offset = new this.#Tempo(value, opts); // create the offset Tempo\n const diffZone = this.#zdt.timeZoneId !== offset.#zdt.timeZoneId;\n // Temporal restricts cross-timezone math to absolute units ('hours') to avoid DST ambiguity\n const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') });\n if (isDefined(unit))\n unit = `${singular(unit)}s`; // coerce to plural\n return (isUndefined(unit) || since) // if no 'unit' provided, or if called via #since()\n ? getAccessors(duration) // return an Object with all the duration accessors\n .reduce((acc, dur) => Object.assign(acc, { [dur]: duration[dur] }), ifDefined({ iso: duration.toString(), unit }))\n : duration.total({ relativeTo: this.#zdt, unit }); // sum-up the duration components\n }\n /** format the elapsed time between two Tempos (to nanosecond) */\n #since(arg, until = {}) {\n const dur = this.#until(arg, until, true); // get a Tempo.Duration object\n const date = [dur.years, dur.months, dur.days];\n const time = [dur.hours, dur.minutes, dur.seconds];\n const fraction = [dur.milliseconds, dur.microseconds, dur.nanoseconds]\n .map(Math.abs)\n .map(nbr => nbr.toString().padStart(3, '0'))\n .join('');\n const rtf = new Intl.RelativeTimeFormat(this.#local.config['locale'], { style: 'narrow' });\n switch (dur.unit) {\n case 'years':\n return rtf.format(date[0], 'years');\n case 'months':\n return rtf.format(date[1], 'months');\n case 'weeks':\n return rtf.format(date[1], 'weeks');\n case 'days':\n return rtf.format(date[2], 'days');\n case 'hours':\n return rtf.format(time[0], 'hours');\n case 'minutes':\n return rtf.format(time[1], 'minutes');\n case 'seconds':\n return rtf.format(time[2], 'seconds');\n case 'milliseconds':\n case 'microseconds':\n case 'nanoseconds':\n return `${fraction}`;\n default:\n return dur.iso;\n }\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Tempo = _classThis;\n})();\nexport { Tempo };\n// #endregion Namespace\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nTempo.init(); // initialize default global configuration\n// shortcut functions to common Tempo properties / methods\n/** check valid Tempo */ export const isTempo = (tempo) => isType(tempo, 'Tempo');\n/** current timestamp (ts) */ export const getStamp = ((tempo, options) => new Tempo(tempo, options).ts);\n/** create new Tempo */ export const getTempo = ((tempo, options) => new Tempo(tempo, options));\n/** format a Tempo */ export const fmtTempo = ((fmt, tempo, options) => new Tempo(tempo, options).format(fmt));\n//# sourceMappingURL=tempo.class.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport { Logify } from '#core/shared/logify.class.js';\nimport { asArray } from '#core/shared/coercion.library.js';\nimport { sprintf } from '#core/shared/string.library.js';\nimport { ifDefined } from '#core/shared/object.library.js';\nimport { secure } from '#core/shared/utility.library.js';\nimport { cleanify } from '#core/shared/serialize.library.js';\nimport { Immutable } from '#core/shared/class.library.js';\nimport { isEmpty, isObject } from '#core/shared/type.library.js';\n/**\n * Wrap a Promise's resolve/reject/finally methods for later fulfilment.\n * with useful methods for tracking the state of the Promise, chaining fulfilment, etc.\n ```\n new Pledge({tag: string, onResolve?: () => void, onReject?: () => void, onSettle?: () => void})\n new Pledge(tag?: string)\n ```\n */\nlet Pledge = (() => {\n var _Pledge_static;\n let _classDecorators = [Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Pledge = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Pledge\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Pledge = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n #pledge;\n #status = {};\n #dbg;\n static {\n _Pledge_static = { value: {} };\n }\n static STATE = secure({\n Pending: Symbol('pending'),\n Resolved: Symbol('resolved'),\n Rejected: Symbol('rejected')\n });\n /** initialize future Pledge instances */\n static init(arg) {\n if (isObject(arg)) {\n if (isEmpty(arg))\n __classPrivateFieldSet(Pledge, _classThis, {}, \"f\", _Pledge_static); // reset static values\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }), ifDefined({ onResolve: arg.onResolve, onReject: arg.onReject, onSettle: arg.onSettle, }));\n }\n else {\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg, }));\n }\n if (__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug)\n console.log('Pledge: ', __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static)); // debug\n return Pledge.status;\n }\n /** reset static defaults */\n static [Symbol.dispose]() { Pledge.init({}); }\n static get status() {\n return __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static);\n }\n /** use catch:boolean to determine whether to throw or return */\n #catch(...msg) {\n if (this.status.catch) {\n this.#dbg.warn(...msg); // catch, but warn {error}\n return;\n }\n this.#dbg.error(...msg); // assume {error}\n throw new Error(sprintf('pledge: ', ...msg));\n }\n constructor(arg) {\n this.#pledge = Promise.withResolvers();\n this.#status = { state: Pledge.STATE.Pending, ...__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static) };\n if (isObject(arg)) {\n this.#dbg = new Logify({ debug: arg.debug, catch: arg.catch });\n Object.assign(this.#status, ifDefined({ tag: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, debug: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug, catch: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).catch }), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }));\n const onResolve = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onResolve).concat(asArray(arg.onResolve));\n const onReject = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onReject).concat(asArray(arg.onReject));\n const onSettle = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onSettle).concat(asArray(arg.onSettle));\n if (onResolve.length)\n this.#pledge.promise.then(val => onResolve.forEach(cb => cb(val)));\n if (onReject.length)\n this.#pledge.promise.catch(err => onReject.forEach(cb => cb(err)));\n if (onSettle.length)\n this.#pledge.promise.finally(() => onSettle.forEach(cb => cb()));\n if (this.#status.catch)\n this.#pledge.promise.catch(err => this.#catch(this.#status, err));\n }\n else {\n this.#dbg = new Logify();\n Object.assign(this.#status, ifDefined({ tag: arg ?? __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, }));\n }\n this.#pledge.promise.catch(() => { }); // global catch-all to prevent unhandled rejections\n Object.freeze(this); // make this instance immutable\n }\n get [Symbol.toStringTag]() {\n return 'Pledge';\n }\n [Symbol.dispose]() {\n if (this.isPending)\n this.reject(new Error(`Pledge disposed`)); // discard pending Pledge (to notify wait-ers)\n }\n get status() {\n return cleanify(this.#status);\n }\n get promise() {\n return this.#pledge.promise;\n }\n get state() {\n return this.#status.state.description;\n }\n get isPending() {\n return this.#status.state === Pledge.STATE.Pending;\n }\n get isResolved() {\n return this.#status.state === Pledge.STATE.Resolved;\n }\n get isRejected() {\n return this.#status.state === Pledge.STATE.Rejected;\n }\n get isSettled() {\n return this.#status.state !== Pledge.STATE.Pending;\n }\n toString() {\n return JSON.stringify(this.status);\n }\n resolve(value) {\n if (this.isPending) {\n this.#status.settled = value;\n this.#status.state = Pledge.STATE.Resolved;\n this.#pledge.resolve(value); // resolve, then trigger any Pledge.onResolve, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n reject(error) {\n if (this.isPending) {\n this.#status.error = error;\n this.#status.state = Pledge.STATE.Rejected;\n this.#pledge.reject(error); // reject, then trigger any Pledge.onReject, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n then(fn) {\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Pledge = _classThis;\n})();\nexport { Pledge };\n//# sourceMappingURL=pledge.class.js.map"],"names":["isTempo","ranges","key","scope","description","define","qtr.key","qtr.scope","qtr.description","qtr.define","szn.key","szn.scope","szn.description","szn.define","zdc.key","zdc.scope","zdc.description","zdc.define","per.key","per.scope","per.description","per.define","enums.WEEKDAY","enums.WEEKDAYS","enums.MONTH","enums.MONTHS","enums.DURATION","enums.DURATIONS","enums.SEASON","enums.COMPASS","enums.ELEMENT","enums.LIMIT","enums.PARSE","enums.FORMAT","enums.MUTATION","enums.OPTION","enums.ZONED_DATE_TIME"],"mappings":"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","x_google_ignoreList":[1]} \ No newline at end of file +{"version":3,"file":"tempo.bundle.esm.js","sources":["temporal.polyfill.js","../../../node_modules/tslib/tslib.es6.mjs","../../library/dist/type.library.js","../../library/dist/reflection.library.js","../../library/dist/utility.library.js","../../library/dist/function.library.js","../../library/dist/serialize.library.js","../../library/dist/class.library.js","../../library/dist/logify.class.js","../../library/dist/object.library.js","../../library/dist/coercion.library.js","../../library/dist/storage.library.js","../../library/dist/proxy.library.js","../../library/dist/string.library.js","../../library/dist/enumerate.library.js","tempo.config/tempo.enum.js","tempo.config/terms/term.utils.js","tempo.config/terms/term.quarter.js","tempo.config/terms/term.season.js","tempo.config/terms/term.zodiac.js","tempo.config/terms/term.timeline.js","tempo.config/terms/term.import.js","tempo.config/tempo.default.js","../../library/dist/array.library.js","../../library/dist/prototype.library.js","tempo.class.js","../../library/dist/pledge.class.js"],"sourcesContent":["/**\n * This file verifies native Temporal API support.\n * Tempo requires an environment with native Temporal support or a user-provided polyfill.\n */\n// @ts-ignore\nif (!globalThis.Temporal) {\n const message = `\n[Tempo] Temporal API not found.\nThis library requires the ECMAScript Temporal API. Please ensure your environment \nsupports it natively (Node.js 20+, modern browsers) or provide your own polyfill.\n\nTo add a polyfill to your project:\n1. Install: npm install @js-temporal/polyfill\n2. Import at your entry point: import '@js-temporal/polyfill';\n`;\n console.error(message);\n throw new Error('Temporal API not found.');\n}\nexport {};\n//# sourceMappingURL=temporal.polyfill.js.map","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","/** the primitive type reported by toStringTag() */\nconst protoType = (obj) => Object.prototype.toString.call(obj).slice(8, -1);\n/**\n * return an object's type as a ProperCase string.\n * if instance, return Class name\n */\nexport const getType = (obj, ...instances) => {\n const type = protoType(obj);\n switch (true) {\n case type === 'Object':\n const name = isArrayLike(obj)\n ? 'ArrayLike' // special case Object: ArrayLike\n : obj.constructor?.name ?? 'Object'; // some Objects do not have a constructor method\n return (instances\n .find(inst => obj instanceof inst.class)?.type // allow for 'real' name of Instance, after minification\n ?? name); // return Object name\n case type === 'Function' && Function.prototype.toString.call(obj).startsWith('class '):\n return 'Class';\n default:\n return type;\n }\n};\n/** return TypeValue object */\nexport const asType = (value, ...instances) => ({ type: getType(value, ...instances), value });\n/** assert value is one of a list of Types */\nexport const isType = (obj, ...types) => types.includes(getType(obj));\n/** Type-Guards: assert \\ is of \\ */\nexport const isPrimitive = (obj) => isType(obj, 'String', 'Number', 'BigInt', 'Boolean', 'Symbol', 'Undefined', 'Void', 'Null', 'Empty');\nexport const isReference = (obj) => !isPrimitive(obj);\nexport const isIterable = (obj) => Symbol.iterator in Object(obj) && !isString(obj);\nexport const isString = (obj) => isType(obj, 'String');\nexport const isNumber = (obj) => isType(obj, 'Number') && isFinite(obj);\nexport const isInteger = (obj) => isType(obj, 'BigInt');\nexport const isIntegerLike = (obj) => isType(obj, 'String') && /^-?[0-9]+n$/.test(obj);\nexport const isDigit = (obj) => isType(obj, 'Number', 'BigInt');\nexport const isBoolean = (obj) => isType(obj, 'Boolean');\nexport const isArray = (obj) => isType(obj, 'Array');\nexport const isArrayLike = (obj) => protoType(obj) === 'Object' && 'length' in obj && Object.keys(obj).every(key => key === 'length' || !isNaN(Number(key)));\nexport const isObject = (obj) => isType(obj, 'Object');\nexport const isDate = (obj) => isType(obj, 'Date');\nexport const isRegExp = (obj) => isType(obj, 'RegExp');\nexport const isRegExpLike = (obj) => isType(obj, 'String') && /^\\/.*\\/$/.test(obj);\nexport const isSymbol = (obj) => isType(obj, 'Symbol');\nexport const isSymbolFor = (obj) => isType(obj, 'Symbol') && Symbol.keyFor(obj) !== undefined;\nexport const isPropertyKey = (obj) => isType(obj, 'String', 'Number', 'Symbol');\nexport const isNull = (obj) => isType(obj, 'Null');\nexport const isNullish = (obj) => isType(obj, 'Null', 'Undefined', 'Void', 'Empty');\nexport const isUndefined = (obj) => isType(obj, 'Undefined', 'Void', 'Empty');\nexport const isDefined = (obj) => !isNullish(obj);\nexport const isClass = (obj) => isType(obj, 'Class');\nexport const isFunction = (obj) => isType(obj, 'Function', 'AsyncFunction');\nexport const isPromise = (obj) => isType(obj, 'Promise');\nexport const isMap = (obj) => isType(obj, 'Map');\nexport const isSet = (obj) => isType(obj, 'Set');\nexport const isError = (err) => isType(err, 'Error');\nexport const isTemporal = (obj) => protoType(obj).startsWith('Temporal.');\n// non-standard Objects\nexport const isTempo = (obj) => isType(obj, 'Tempo');\nexport const isEnum = (obj) => isType(obj, 'Enumify');\nexport const isPledge = (obj) => isType(obj, 'Pledge');\nexport const nullToZero = (obj) => obj ?? 0;\nexport const nullToEmpty = (obj) => obj ?? '';\nexport const nullToValue = (obj, value) => obj ?? value;\n/** object has no values */\nexport const isEmpty = (obj) => false\n || isNullish(obj)\n || (isObject(obj) && (Reflect.ownKeys(obj).length === 0))\n || (isString(obj) && (obj.trim().length === 0))\n || (isNumber(obj) && (isNaN(obj) === true))\n || (isArray(obj) && (obj.length === 0))\n || (isSet(obj) && (obj.size === 0))\n || (isMap(obj) && (obj.size === 0));\nexport function assertCondition(condition, message) {\n if (!condition)\n throw new Error(message);\n}\nexport function assertString(str) { assertCondition(isString(str), `Invalid string: ${str}`); }\n;\nexport function assertNever(val) { throw new Error(`Unexpected object: ${val}`); }\n;\n//# sourceMappingURL=type.library.js.map","import { asType, getType, isEmpty, isFunction, isPrimitive } from '#library/type.library.js';\n/** property marker used to unwrap proxies in ownEntries() */\nexport const $Target = Symbol.for('$Target');\n/** mutate Object | Array by excluding values with specified primitive 'types' */\nexport function exclude(obj, ...types) {\n const exclusions = types\n .map(item => item.toLowerCase()) // cast Primitives as Lowercase to aid in matching\n .distinct();\n if (obj && typeof obj === 'object') { // only works on Objects and Arrays\n const keys = [];\n ownEntries(obj)\n .forEach(([key, value]) => {\n const type = getType(value);\n if (['Object', 'Array'].includes(type)) // recurse into object\n exclude(value, ...exclusions);\n if (isPrimitive(value) && exclusions.includes(type.toLowerCase()))\n keys.push(key);\n });\n if (!isEmpty(keys)) // if any values to be excluded\n omit(obj, ...keys);\n }\n return obj; // return Object reference, even though Object has been mutated\n}\nexport function omit(obj, ...keys) {\n const { type, value } = asType(obj);\n switch (type) {\n case 'Array':\n if (isEmpty(keys)) {\n value.clear(); // clear entire Array\n break;\n }\n keys\n .sort()\n .reverse() // remove from end-to-start to preserve indexes\n .forEach(key => value.splice(Number(key), 1)); // remove Array index\n break;\n case 'Object':\n (isEmpty(keys) ? ownKeys(value) : keys) // if no {keys}, assume all ownKeys\n .forEach(key => Reflect.deleteProperty(value, key));\n }\n return value; // return Object reference, even though Object has been mutated\n}\n/** remove all ownKeys from an Object | Array */\nexport function purge(obj) {\n return omit(obj);\n}\n/** reset Object */\nexport function reset(orig, obj) {\n return Object.assign(purge(orig), { ...obj });\n}\n// These functions are to preserve the typescript 'type' of an object's keys & values\n// and will include both string and symbol keys\n/** array of all enumerable PropertyKeys */\nexport function ownKeys(json) {\n return ownEntries(json).map(([key]) => key);\n}\n/** array of all enumerable object values */\nexport function ownValues(json) {\n return ownEntries(json).map(([_, value]) => value);\n}\n/** tuple of enumerable entries with string | symbol keys */\nexport function ownEntries(json, all = false) {\n if (!json || typeof json !== 'object')\n return [];\n const getOwn = (obj) => {\n const tgt = obj[$Target] ?? obj; // unwrap if it's a proxy\n return Reflect.ownKeys(tgt)\n .filter(key => Object.getOwnPropertyDescriptor(tgt, key)?.enumerable)\n .map(key => [key, tgt[key]]);\n };\n if (!all)\n return getOwn(json);\n // all=true: collect per-level bottom-up, reverse to top-down, dedup via Map\n // Map preserves first-insertion position but allows value update (own key shadows ancestor)\n const levels = [];\n const limit = 50; // prevent infinite loops (increased from 10)\n let depth = 0;\n let proto = json;\n do {\n const t = proto[$Target] ?? proto; // CRITICAL: unwrap before checking marker to avoid trap recursion\n const lvl = getOwn(proto);\n if (lvl.length)\n levels.push(lvl);\n proto = Object.getPrototypeOf(t);\n } while (proto && proto !== Object.prototype && ++depth < limit);\n return [...new Map(levels.reverse().flat()).entries()];\n}\n/** return an Object containing all 'own' and 'inherited' enumerable properties */\nexport function allObject(json) {\n return Object.fromEntries(ownEntries(json, true));\n}\n/** get a string-array of 'getter' names for an object */\nexport const getAccessors = (obj = {}) => {\n return ownAccessors(obj, 'get');\n};\n/** get a string-array of 'setter' names for an object */\nexport const setAccessors = (obj = {}) => {\n return ownAccessors(obj, 'set');\n};\nconst ownAccessors = (obj = {}, type) => {\n const accessors = Object.getOwnPropertyDescriptors(obj.prototype || Object.getPrototypeOf(obj));\n return ownEntries(accessors)\n .filter(([_, descriptor]) => isFunction(descriptor[type]))\n .map(([key, _]) => key);\n};\n/** copy all Own properties (including getters / setters) to a new object */\nexport const copyObject = (target, source) => {\n return Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n};\n//# sourceMappingURL=reflection.library.js.map","import { ownValues } from '#library/reflection.library.js';\nimport { isDefined, isReference } from '#library/type.library.js';\n/** General utility functions */\n/** analyze the Call Stack to determine calling Function's name */\nexport const getCaller = () => {\n const stackTrace = new Error().stack // only tested in latest FF and Chrome\n ?.split('\\n')\n ?.map(itm => itm.trim())\n ?.filter(itm => !itm.startsWith('Error'))\n ?? [];\n const callerName = stackTrace[2].split(' ');\n return (callerName[1] === 'new') ? callerName[2] : callerName[1].split('.')[0];\n};\n/** analyze the Call Stack to determine calling Function's name */\nexport const getScript = (nbr = 1) => {\n const stackTrace = new Error().stack\n ?.match(/([^ \\n\\(@])*([a-z]*:\\/\\/\\/?)*?[a-z0-9\\/\\\\]*\\.js/ig)?.[nbr];\n return decodeURI(stackTrace ?? ''); // decodeURI is needed to handle spaces in file-names\n};\n/**\n * introduce a wait-timer that will Error() on timeOut.\n * best used with Promise.race([xxx(), sleep()]\n * @param msg\t\t\tstring to display on a timeout\n * @param timeOut\thow many milliseconds to sleep (default 2-seconds)\n * @returns\t\t\t\tPromise\\\n */\nexport const sleep = (msg = 'sleep: timed out', timeOut = 2000) => new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), timeOut));\n/** Javascript Runtimes */\nexport const CONTEXT = {\n 'Unknown': 'unknown',\n 'Browser': 'browser',\n 'NodeJS': 'nodejs',\n 'Deno': 'deno',\n 'GoogleAppsScript': 'google-apps-script',\n};\n/** determine JavaScript environment context */\nexport const getContext = () => {\n const global = globalThis;\n if (isDefined(global.SpreadsheetApp))\n return { global, type: CONTEXT.GoogleAppsScript };\n if (isDefined(global.window?.document))\n return { global, type: CONTEXT.Browser };\n if (isDefined(global.process?.versions?.node))\n return { global, type: CONTEXT.NodeJS };\n return { global, type: CONTEXT.Unknown };\n};\n// useful for those times when a full Enumify object is not needed, but still lock the Object from mutations\n/** deep-freeze an Array | Object to make it immutable */\nexport function secure(obj) {\n if (isReference(obj)) // skip primitive values\n ownValues(obj) // retrieve the properties on obj\n .forEach(val => Object.isFrozen(val) || secure(val)); // secure each value, if not already Frozen\n return Object.freeze(obj); // freeze the object itself\n}\n//# sourceMappingURL=utility.library.js.map","import { secure } from '#library/utility.library.js';\nimport { isUndefined } from '#library/type.library.js';\n/** curry a Function to allow partial calls */\nexport function curry(fn) {\n return function curried(...args) {\n return (args.length >= fn.length)\n ? fn(...args)\n : (...nextArgs) => curried(...args, ...nextArgs);\n };\n}\n/** generic function to memoize repeated function calls */\nexport function memoizeFunction(fn) {\n const cache = new Map(); // using a Map for better key handling than plain objects\n return function (...args) {\n const key = JSON.stringify(args); // create a unique key from arguments\n console.log('memoize: ', key);\n if (!cache.has(key)) {\n // @ts-ignore\n const result = fn.apply(this, args); // call the original function with the correct context\n console.log('set: ', result);\n cache.set(key, Object.freeze(result)); // stash the result for subsequent calls\n }\n else\n console.log('get: ', cache.get(key));\n return cache.get(key);\n };\n}\nconst wm = new WeakMap();\n/** manually clear the memoization cache for an object */\nexport function clearCache(obj) {\n wm.delete(obj);\n}\n/** define a Descriptor for an Object's memoized-method */\nexport function memoizeMethod(name, fn) {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n value: function (...args) {\n const key = `${String(name)},${JSON.stringify(args)}`;\n let cache = wm.get(this);\n if (!cache) { // add a new object into the WeakMap\n cache = Object.create(null);\n wm.set(this, cache);\n }\n if (isUndefined(cache[key])) { // first time for this method\n cache[key] = fn.apply(this, args); // evaluate the method\n secure(cache[key]); // freeze the returned value\n }\n return cache[key];\n }\n };\n}\n//# sourceMappingURL=function.library.js.map","import { curry } from '#library/function.library.js';\nimport { ownKeys, ownValues, ownEntries } from '#library/reflection.library.js';\nimport { isType, asType, isEmpty, isDefined, isUndefined, isNullish, isString, isObject, isArray, isFunction, isSymbolFor, isSymbol } from '#library/type.library.js';\n/** registry of registered classes */\n// DO NOT EDIT THIS VALUE: used by decorator.library.ts\nexport const Registry = new Map();\n// be aware that 'structuredClone' preserves \\ values... \n// and JSON.stringify() does not\n/** make a deep-copy, using standard browser or JSON functions */\nexport function clone(obj, opts) {\n try {\n return globalThis.structuredClone(obj, opts);\n }\n catch {\n return cleanify(obj); // fallback to JSON functions\n }\n}\n/** return a copy. remove unsupported values (e.g. \\, function) */\nexport function cleanify(obj) {\n try {\n return JSON.parse(JSON.stringify(obj)); // run any toString() methods\n }\n catch (error) {\n console.warn('Could not clean object: ', obj);\n return { ...obj };\n }\n}\n/** deep-copy an Object, and optionally replace \\ fields with a Sentinel function call\t*/\nexport function cloneify(obj, sentinel) {\n try {\n return objectify(stringify(obj), sentinel);\n }\n catch (error) {\n console.warn('Could not cloneify object: ', obj);\n console.warn('stack: ', error.stack);\n return obj;\n }\n}\nfunction replacer(key, obj) { return isEmpty(key) ? obj : stringize(obj); }\nfunction reviver(_key, val) { return decode(val); }\n// safe-characters [sp \" ; < > [ ] ^ { | }]\nconst safeList = ['20', '22', '3B', '3C', '3E', '5B', '5D', '5E', '7B', '7C', '7D'];\n/** encode control characters, then replace a safe-subset back to text-string */\nfunction encode(val) {\n let enc = encodeURI(val);\n if (enc.includes('%')) { // if an encoded URI might be in string\n safeList.forEach(code => {\n const uri = '%' + code;\n const reg = new RegExp(uri, 'g');\n enc = enc.replace(reg, decodeURI(uri));\n });\n }\n return enc;\n}\n/** decode control characters */\nfunction decode(val) {\n if (isString(val)) {\n try {\n return decodeURI(val); // might fail if badly encoded '%'\n }\n catch (error) {\n // console.warn(`decodeURI: ${(error as Error).message} -> ${val}`);\n }\n }\n return val; // return original value\n}\n/** check type can be stringify'd */\nfunction isStringable(val) {\n return !isType(val, 'Function', 'AsyncFunction', 'WeakMap', 'WeakSet', 'WeakRef');\n}\n/** string representation of a single key:value Object */\nfunction oneKey(type, value) {\n return `{\"$${type}\":${value}}`;\n}\n/** Symbols in an Object-key will need special treatment */\nfunction fromSymbol(key) {\n return stringize(isSymbol(key) // @@(name) for global, @(name) for local symbols\n ? `${isSymbolFor(key) ? '@' : ''}@(${key.description ?? ''})`\n : key);\n}\nconst symKey = /^@(@)?\\(([^\\)]*)\\)$/; // pattern to match a stringify'd Symbol\n/** reconstruct a Symbol from a string-representation of a key */\nfunction toSymbol(value) {\n const [pat, keyFor, desc] = value.toString().match(symKey) || [null, undefined, undefined];\n switch (true) {\n case isSymbol(value): // already a Symbol\n case isNullish(pat): // incorrectly encoded Symbol\n case isDefined(keyFor) && isUndefined(desc): // incorrectly encoded global Symbol\n return value;\n case isDefined(keyFor): // global Symbol\n return Symbol.for(desc);\n case isUndefined(keyFor): // local Symbol\n default:\n return Symbol(desc);\n }\n}\n/**\n * For items which are not currently serializable via standard JSON.stringify (Undefined, BigInt, Set, Map, Symbol, etc.)\n * this creates a stringified, single key:value Object to represent the value; for example '{ \"$BigInt\": 123 }'\n *\n * Drawbacks:\n * no support Function / WeakMap / WeakSet / WeakRef\n * limited support for user-defined Classes (must be specifically registered with @Serialize() decorator)\n */\n/**\n * serialize Objects for string-safe stashing in WebStorage, Cache, etc\n * uses JSON.stringify where available, else returns stringified single key:value Object '{[$type]: value}'\n */\nexport function stringify(obj) {\n return stringize(obj, false);\n}\n/**\n * internal function to process stringify-requests (and hide second parameter)\n * where first argument is the object to stringify, and\n * the second argument is a boolean to indicate if function is being called recursively\n */\nfunction stringize(obj, recurse = true) {\n const arg = asType(obj);\n const one = curry(oneKey)(arg.type); // curry the oneKey() function\n switch (arg.type) {\n case 'String':\n if (!recurse) { // if a top-level string (e.g. 'true' or '1234')\n recurse = arg.value === 'true' // ensure true|false|null|1234 are quoted by JSON.stringify\n || arg.value === 'false' // so they will be correctly identified during objectify()\n || arg.value === 'null'\n || parseFloat(arg.value).toString() === arg.value;\n }\n return recurse\n ? JSON.stringify(encode(arg.value)) // encode string for safe-storage\n : encode(arg.value); // dont JSON.stringify a top-level string\n case 'Boolean':\n case 'Null':\n case 'Number':\n return JSON.stringify(arg.value); // JSON.stringify will correctly handle these\n case 'Void':\n case 'Undefined':\n return one(JSON.stringify('void')); // preserve 'undefined' values\t\t\n case 'BigInt':\n return one(arg.value.toString()); // even though BigInt has a toString method, it is not supported in JSON.stringify\n case 'Object':\n const obj = ownEntries(arg.value)\n .filter(([, val]) => isStringable(val))\n .map(([key, val]) => `${fromSymbol(key)}: ${stringize(val)}`)\n .join(',');\n return `{${obj}}`;\n case 'Array':\n const arr = arg.value\n .filter(val => isStringable(val))\n .map(val => stringize(val))\n .join(',');\n return `[${arr}]`;\n case 'Map':\n const map = Array.from(arg.value.entries())\n .filter(([, val]) => isStringable(val))\n .map(([key, val]) => `[${stringize(key)}, ${stringize(val)}]`)\n .join(',');\n return one(`[${map}]`);\n case 'Set':\n const set = Array.from(arg.value.values())\n .filter(val => isStringable(val))\n .map(val => stringize(val))\n .join(',');\n return one(`[${set}]`);\n case 'Symbol':\n return one(fromSymbol(arg.value));\n case 'RegExp':\n return one(stringize({ source: arg.value.source, flags: arg.value.flags }));\n case 'Class':\n default:\n const value = arg.value;\n switch (true) {\n case !isStringable(value): // Object is not stringify-able\n return undefined;\n case isFunction(value.toJSON): // Object has its own toJSON method\n return one(stringize(value.toJSON()));\n case isFunction(value.toString): // Object has its own toString method\n const str = value.toString();\n return one(str.includes('\"') // TODO: improve detection of JSON vs non-JSON strings\n ? str\n : JSON.stringify(str));\n case isFunction(value.valueOf): // Object has its own valueOf method\t\t\n return one(JSON.stringify(value.valueOf()));\n default: // else standard stringify\n return one(JSON.stringify(value, replacer));\n }\n }\n}\n/** rebuild an Object from its stringified representation */\nexport function objectify(str, sentinel) {\n if (!isString(str))\n return str; // skip parsing\n let parse;\n try {\n parse = JSON.parse(str, reviver); // catch if cannot parse\n }\n catch (error) {\n if (str.startsWith('\"') && str.endsWith('\"')) {\n console.warn(`objectify.parse: -> ${str}, ${error.message}`);\n return str; // bail-out\n }\n else\n return objectify(`\"${str}\"`, sentinel); // have another try, quoted\n }\n switch (true) {\n case str.startsWith('{') && str.endsWith('}'): // looks like Object\n case str.startsWith('[') && str.endsWith(']'): // looks like Array\n return traverse(parse, sentinel); // recurse into object\n default:\n return parse;\n }\n}\n/** recurse into Object / Array, looking for special single key:value Objects */\nfunction traverse(obj, sentinel) {\n if (isObject(obj)) {\n return typeify(ownEntries(obj)\n .reduce((acc, [key, val]) => Object.assign(acc, { [toSymbol(key)]: typeify(traverse(val, sentinel)) }), {}), sentinel);\n }\n if (isArray(obj)) {\n return ownValues(obj)\n .map(val => typeify(traverse(val, sentinel)));\n }\n return obj;\n}\n/** rebuild an Object from its single key:value representation */\nfunction typeify(json, sentinel) {\n if (!isObject(json) || ownKeys(json).length !== 1)\n return json; // only JSON Objects, with a single key:value pair\n const [$type, value] = ownEntries(json)[0];\n if (!String($type).startsWith('$'))\n return json; // not a serialized single key:value Object\n const type = $type.substring(1); // remove '$' prefix\n switch (type) {\n case 'String':\n case 'Boolean':\n case 'Object':\n case 'Array':\n return value; // these types are already handled by traverse()\n case 'Number':\n return Number(value);\n case 'BigInt':\n return BigInt(value);\n case 'Null':\n return null;\n case 'Undefined':\n case 'Empty':\n case 'Void':\n return sentinel?.(); // run Sentinel function to handle undefined values\n case 'Date':\n return new Date(value);\n case 'RegExp':\n return new RegExp(value.source, value.flags);\n case 'Symbol':\n return toSymbol(value);\n case 'Map':\n return new Map(value);\n case 'Set':\n return new Set(value);\n default:\n const cls = Registry.get($type); // lookup registered Class\n if (!cls) {\n console.warn(`objectify: dont know how to deserialize '${type}'`);\n return json; // return original JSON object\n }\n return Reflect.construct(cls, [value]); // create new Class instance\n }\n}\n//# sourceMappingURL=serialize.library.js.map","import { ownEntries } from '#library/reflection.library.js';\nimport { Registry } from '#library/serialize.library.js';\n/**\n * Some interesting Class Decorators\n */\n/** decorator to freeze a Class to prevent modification */\nexport function Immutable(value, { kind, name, addInitializer }) {\n name = String(name);\n switch (kind) {\n case 'class':\n const wrapper = {\n [name]: class extends value {\n constructor(...args) {\n super(...args);\n Object.freeze(this); // freeze the instance\n }\n }\n }[name];\n addInitializer(() => {\n const protect = (obj) => {\n ownEntries(Object.getOwnPropertyDescriptors(obj))\n .filter(([name]) => name !== 'constructor') // dont touch the constructor\n .forEach(([name, { configurable, writable }]) => {\n if (configurable) {\n const update = { configurable: false };\n if (writable)\n update.writable = false; // only data descriptors have 'writable'\n Object.defineProperty(obj, name, update);\n }\n });\n };\n protect(value); // protect original static members\n protect(value.prototype); // protect original prototype members\n protect(wrapper); // protect wrapper static members\n protect(wrapper.prototype); // protect wrapper prototype members\n });\n return wrapper;\n default:\n throw new Error(`@Immutable decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n/** register a Class for serialization */\nexport function Serializable(value, { kind, name, addInitializer }) {\n name = String(name); // cast as String\n switch (kind) {\n case 'class':\n addInitializer(() => Registry.set(`$${name}`, value)); // register the class for serialization, via its toString() method\n return value;\n default:\n throw new Error(`@Serializable decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n/** make a Class not instantiable */\nexport function Static(value, { kind, name }) {\n name = String(name);\n switch (kind) {\n case 'class':\n const wrapper = {\n [name]: class extends value {\n constructor(...args) {\n super(...args);\n throw new TypeError(`${name} is not a constructor`);\n }\n }\n }[name];\n return wrapper;\n default:\n throw new Error(`@Static decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n//# sourceMappingURL=class.library.js.map","import { __esDecorate, __runInitializers } from \"tslib\";\nimport { Immutable } from '#library/class.library.js';\nimport { asType, isObject } from '#library/type.library.js';\nconst Method = {\n Log: 'log',\n Info: 'info',\n Warn: 'warn',\n Debug: 'debug',\n Error: 'error',\n};\n/**\n * provide standard logging methods to the console for a class\n */\nlet Logify = (() => {\n let _classDecorators = [Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Logify = class {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Logify = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n #name;\n #opts = {};\n #log(method, ...msg) {\n if (this.#opts.debug)\n console[method](this.#name, ...msg);\n }\n /**\n * if {catch:true} then show a warning on the console and return\n * otherwise show an error on the console and re-throw the error\n */\n catch(...msg) {\n if (this.#opts.catch) {\n this.warn(...msg); // show a warning on the console\n return; // safe-return\n }\n this.error(...msg); // this goes to the console\n throw new Error(`${this.#name}${msg.map(m => isObject(m) ? JSON.stringify(m) : String(m)).join(' ')}`); // catch will be loud or silent, based on #catch config\n }\n /** console.log */ log = (...msg) => this.#log(Method.Log, ...msg);\n /** console.info */ info = (...msg) => this.#log(Method.Info, ...msg);\n /** console.warn */ warn = (...msg) => this.#log(Method.Warn, ...msg);\n /** console.debug */ debug = (...msg) => this.#log(Method.Debug, ...msg);\n /** console.error */ error = (...msg) => this.#log(Method.Error, ...msg);\n constructor(self, opts = {}) {\n const arg = asType(self);\n switch (arg.type) {\n case 'String':\n this.#name = arg.value;\n break;\n // @ts-ignore\n case 'Object':\n Object.assign(opts, arg.value);\n default:\n this.#name = (self ?? this).constructor.name.concat(': ') ?? '';\n }\n this.#opts.debug = opts.debug ?? false; // default debug to 'false'\n this.#opts.catch = opts.catch ?? false; // default catch to 'false'\t\t\t\t\t\t\t\t\n }\n };\n return Logify = _classThis;\n})();\nexport { Logify };\n//# sourceMappingURL=logify.class.js.map","import { ownKeys, ownEntries } from '#library/reflection.library.js';\nimport { isObject, isArray, isReference, isFunction, isDefined, isEmpty, isNullish } from '#library/type.library.js';\n/** Get nested value */\nexport function extract(obj, path, dflt) {\n if (isEmpty(path))\n return obj; // finished searching\n if (!isObject(obj) && !isArray(obj))\n return obj;\n return path\n .toString()\n .replace(/\\[([^\\[\\]]*)\\]/g, '.$1.') // convert [indexes] to properties\n .split('.')\n .filter(field => !isEmpty(field)) // remove empty fields\n .reduce((acc, field) => acc?.[field] ?? null, obj) ?? dflt;\n}\n/** remove quotes around property names */\nexport const unQuoteObj = (obj) => {\n return JSON.stringify(obj)\n ?.replace(/\"([^\"]+)\":/g, '$1: ')\n ?.replace(/,/g, ', ');\n};\n/** copy enumerable properties to a new Object */\nexport const asObject = (obj) => {\n if (isNullish(obj) || !isObject(obj))\n return obj;\n const temp = isArray(obj) ? [] : {};\n ownKeys(obj)\n .forEach(key => temp[key] = asObject(obj[key]));\n return temp;\n};\n/** deep-compare object values for equality */\nexport const isEqual = (obj1 = {}, obj2 = {}) => {\n const keys = new Set(); // union of unique keys from both Objects\n const keys1 = isFunction(obj1.keys) ? Array.from(obj1.keys()) : ownKeys(obj1);\n const keys2 = isFunction(obj2.keys) ? Array.from(obj2.keys()) : ownKeys(obj2);\n keys1.forEach(key => keys.add(key));\n keys2.forEach(key => keys.add(key));\n return [...keys] // cast as Array\n .every(key => {\n const val1 = obj1[key];\n const val2 = obj2[key];\n return isReference(val1) && isReference(val2)\n ? isEqual(val1, val2) // recurse into object\n : val1 === val2;\n });\n};\n/** find all methods on an Object */\nexport const getMethods = (obj, all = false) => {\n const properties = new Set();\n let currentObj = obj;\n do {\n Object\n .getOwnPropertyNames(currentObj)\n .map(key => properties.add(key));\n } while (all && (currentObj = Object.getPrototypeOf(currentObj)));\n return [...properties.keys()]\n .filter(key => isFunction(obj[key]));\n};\n/** extract only defined values from Object */\nexport function ifDefined(obj) {\n return ownEntries(obj)\n .reduce((acc, [key, val]) => {\n if (isDefined(val))\n acc[key] = val;\n return acc;\n }, {});\n}\n/** extract a subset of keys from an object */\nexport const pick = (obj, ...keys) => {\n const ownKeys = Object.getOwnPropertyNames(obj);\n return keys.reduce((acc, key) => {\n if (ownKeys.includes(key))\n acc[key] = obj[key];\n return acc;\n }, {});\n};\n/** extract a named key from an array of objects */\nexport const pluck = (objs, key) => objs.map(obj => obj[key]);\n/** extend an object with the properties of another */\nexport const extend = (obj, ...objs) => Object.assign(obj, ...objs);\nexport const countProperties = (obj = {}) => ownKeys(obj).length;\nexport function looseIndex(arg) {\n if (isDefined(arg))\n return isFunction(arg) ? arg() : arg;\n return (obj) => isFunction(obj) ? obj() : obj;\n}\n/** loose object with symbols values */\nlooseIndex.stringSymbol = looseIndex();\n/** loose object with symbol keys and RegExp values */\nlooseIndex.symbolRegExp = looseIndex();\n/** loose object with symbol keys and string values */\nlooseIndex.symbolString = looseIndex();\n/** loose object with string keys and string values */\nlooseIndex.stringString = looseIndex();\n//# sourceMappingURL=object.library.js.map","import { clone, stringify } from '#library/serialize.library.js';\nimport { isIntegerLike, isArrayLike, isDefined, isInteger, isIterable, isNullish, isString, isUndefined, asType, isNumber } from '#library/type.library.js';\nexport function asArray(arr = [], fill) {\n switch (true) {\n case isArrayLike(arr): // allow for {length:nn} objects\n case isIterable(arr) && !isString(arr): // dont iterate Strings\n return Array.from(arr, val => {\n return isUndefined(fill) || isDefined(val)\n ? val // if no {fill}, then use {val}\n : clone(fill); // clone {fill} to create new Objects\n });\n default:\n return Array.of(arr);\n }\n}\n/** stringify if not nullish */\nexport function asString(str) {\n return isNullish(str)\n ? ''\n : isInteger(str)\n ? str.toString() + 'n'\n : stringify(str);\n}\n/** convert String | Number | BigInt to Number */\nexport function asNumber(str) {\n return parseFloat(str?.toString() ?? 'NaN');\n}\n/** convert String | Number to BigInt */\nexport function asInteger(str) {\n const arg = asType(str);\n switch (arg.type) {\n case 'BigInt':\n return arg.value; // already a BigInt\n case 'Number':\n return BigInt(Math.trunc(arg.value)); // cast as BigInt\n case 'String':\n return (isIntegerLike(arg.value)) // String representation of a BigInt\n ? BigInt(arg.value.slice(0, -1)) // get rid of trailing 'n'\n : BigInt(arg.value);\n default:\n return str;\n }\n}\n/** test if can convert String to Numeric */\nexport function isNumeric(str) {\n const arg = asType(str);\n switch (arg.type) {\n case 'Number':\n case 'BigInt':\n return true;\n case 'String':\n return isIntegerLike(arg.value)\n ? true // is Number | BigInt\n : !isNaN(asNumber(str)) && isFinite(str); // test if Number\n default:\n return false;\n }\n}\n/** return as Number if possible, else original String */\nexport const ifNumeric = (str, stripZero = false) => {\n switch (true) {\n case isInteger(str): // BigInt → Number\n return Number(str);\n case isNumber(str): // Number → as-is\n return str;\n case isNumeric(str) && (!str?.toString().startsWith('0') || stripZero):\n return asNumber(str); // numeric String → Number\n default:\n return str; // non-numeric String → as-is\n }\n};\n//# sourceMappingURL=coercion.library.js.map","import { objectify, stringify } from '#library/serialize.library.js';\nimport { CONTEXT, getContext } from '#library/utility.library.js';\nimport { isDefined, isUndefined, isString } from '#library/type.library.js';\nconst context = getContext();\nlet storage = context.type === CONTEXT.Browser\n ? context.global?.localStorage //as globalThis.Storage\t\t// default to localStorage in a browser\n : undefined;\n/** select local | session storage */\nexport function selStorage(store = 'local') {\n const name = (store + 'Storage');\n return storage = globalThis[name]; // return whichever was selected.\n}\nexport function getStorage(key, dflt) {\n let store;\n if (isUndefined(key))\n return dflt ?? {};\n switch (context.type) {\n case CONTEXT.Browser:\n store = storage.getItem(key);\n break;\n case CONTEXT.NodeJS:\n store = context.global.process.env[key];\n break;\n case CONTEXT.GoogleAppsScript:\n store = context.global.PropertiesService?.getUserProperties().getProperty(key);\n break;\n default:\n throw new Error(`Cannot determine Javascript context: ${context.type}`);\n }\n return isString(store)\n ? objectify(store) // rebuild object from its stringified representation\n : dflt;\n}\n/** set / delete storage */\nexport function setStorage(key, val) {\n const stash = isDefined(val) ? stringify(val) : undefined;\n const set = isDefined(stash);\n switch (context.type) {\n case CONTEXT.Browser:\n set\n ? storage.setItem(key, stash)\n : storage.removeItem(key);\n break;\n case CONTEXT.NodeJS:\n set\n ? (context.global.process.env[key] = stash)\n : (delete context.global.process.env[key]);\n break;\n case CONTEXT.GoogleAppsScript:\n set\n ? context.global.PropertiesService?.getUserProperties().setProperty(key, stash)\n : context.global.PropertiesService?.getUserProperties().deleteProperty(key);\n break;\n default:\n throw new Error(`Cannot determine Javascript context: ${context.type}`);\n }\n}\n//# sourceMappingURL=storage.library.js.map","import { $Target, allObject } from '#library/reflection.library.js';\nimport { secure } from '#library/utility.library.js';\nimport { isFunction } from '#library/type.library.js';\n/** Node.js custom inspection symbol */\nconst $Inspect = Symbol.for('nodejs.util.inspect.custom');\n/** Stealth Proxy pattern to allow for iteration and logging over a Frozen object */\nexport function getProxy(target) {\n secure(target);\n const tgt = target[$Target] ?? target;\n let cachedJSON;\n return new Proxy(target, {\n isExtensible: (t) => Reflect.isExtensible(t),\n preventExtensions: (t) => Reflect.preventExtensions(t),\n getOwnPropertyDescriptor: (_, key) => Reflect.getOwnPropertyDescriptor(tgt, key),\n getPrototypeOf: () => Reflect.getPrototypeOf(tgt),\n deleteProperty: (_, key) => Reflect.deleteProperty(tgt, key),\n ownKeys: () => Reflect.ownKeys(tgt),\n has: (_, key) => Reflect.has(tgt, key),\n set: (_, key, val) => Reflect.set(tgt, key, val),\n get: (_, key, receiver) => {\n if (key === $Target)\n return tgt; // found the 'stop' marker\n if (key === $Inspect || key === 'toJSON') { // two special properties require virtual closures\n const own = Object.getOwnPropertyDescriptor(tgt, key);\n if (own && isFunction(own.value)) // if object already has its own toJSON, return\n return own.value;\n if (!cachedJSON) { // otherwise, create a virtual closure\n const result = allObject(receiver); // resolve full-object representation\n cachedJSON = () => result; // memoize for subsequent calls\n }\n return cachedJSON; // return the memoized closure\n }\n const val = Reflect.get(tgt, key, receiver);\n return (typeof val === 'function') // if the value is a function\n ? val.bind(tgt) // bind it to the target\n : val; // else return the value\n },\n });\n}\n//# sourceMappingURL=proxy.library.js.map","import { asNumber, asString, isNumeric } from '#library/coercion.library.js';\nimport { stringify } from '#library/serialize.library.js';\nimport { isString, isObject, assertCondition, assertString, nullToValue } from '#library/type.library.js';\n// General functions\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// This section needs to be Function declarations so that they are hoisted\n// (because they are referenced in prototype.library)\n/**\n * clean a string to remove some standard control-characters (tab, line-feed, carriage-return) and trim redundant spaces.\n * allow for optional RegExp to specify additional match\n */\nexport function trimAll(str, pat) {\n return str\n .toString() // coerce to String\n .replace(pat, '') // remove regexp, if supplied\n .replace(/\\t/g, ' ') // replace with \n .replace(/(\\r\\n|\\n|\\r)/g, ' ') // replace & \n .replace(/\\s{2,}/g, ' ') // trim multiple \n .trim(); // leading/trailing \n}\n/** every word has its first letter capitalized */\nexport function toProperCase(...str) {\n return str\n .flat() // in case {str} was already an array\n .map(text => text.replace(/\\w\\S*/g, word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()))\n .join(' ');\n}\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst PAT = /[A-Z\\xC0-\\xD6\\xD8-\\xDE]?[a-z\\xDF-\\xF6\\xF8-\\xFF]+|[A-Z\\xC0-\\xD6\\xD8-\\xDE]+(?![a-z\\xDF-\\xF6\\xF8-\\xFF])|\\d+/g;\nexport const toCamelCase = (sentence) => {\n let [word, ...rest] = sentence.match(PAT) ?? [''];\n if (isNumeric(word)) {\n word = rest[0];\n rest.splice(0, 1);\n }\n return (sentence.startsWith('_') ? '_' : '') + word.toLocaleLowerCase() + toProperCase(...rest).replace(/ /g, '');\n};\nconst HEX = 16;\nexport const randomString = (len = 36) => {\n let str = '';\n do // generate random strings\n str += Math.floor(Math.random() * 10 ** 16).toString(HEX).substring(2, 15);\n while (str.length < len);\n return str.substring(0, len);\n};\nexport function sprintf(fmt, ...msg) {\n const regexp = /\\$\\{(\\d)\\}/g; // pattern to find \"${digit}\" parameter markers\n let sfmt = asString(fmt); // avoid mutate fmt\n if (!isString(fmt)) { // might be an Object\n msg.unshift(JSON.stringify(fmt)); // push to start of msg[]\n sfmt = ''; // reset the string-format\n }\n let cnt = 0; // if the format does not contain a corresponding '${digit}' then re-construct the parameters\n sfmt = sfmt.replace(/%[sj]/g, _ => `\\${${cnt++}}`); // flip all the %s or %j to a ${digit} parameter\n const params = Array.from(sfmt.matchAll(regexp))\n .map(match => Number(match[1])); // which parameters are in the fmt\n msg.forEach((_, idx) => {\n if (!params.includes(idx)) // if more args than params\n sfmt += `${sfmt.length === 0 ? '' : sfmt.endsWith(':') ? ' ' : ', '}\\${${idx}}`; // append a dummy params to fmt\n });\n // 2024-02-21 some Objects do not have a .toString method\n return sfmt.replace(regexp, (_, idx) => msg[idx]?.toString?.() || stringify(msg[idx]));\n}\n/** apply a plural suffix, if greater than '1' */\nexport const plural = (val, word, plural = word + 's') => {\n const _plural = (num, word, plural = word + 's') => [1, -1].includes(Number(num)) ? word : plural;\n return isObject(val)\n ? (num, word) => _plural(num, word, val[word])\n : _plural(val, word, plural);\n};\n/** strip a plural suffix, if endsWith 's' */\nexport const singular = (val) => val.endsWith('s') ? val.slice(0, -1) : val;\n/** make an Object's values into a Template Literals, and evaluate */\nexport const makeTemplate = (templateString) => (templateData) => new Function(`{${Object.keys(templateData).join(',')}}`, 'return `' + templateString + '`')(templateData);\nexport const toLower = (str) => isString(str) ? asString(str).toLowerCase().trim() : str;\nexport const toUpper = (str) => isString(str) ? asString(str).toUpperCase().trim() : str;\nexport const strlen = (str, min, max) => {\n assertString(str);\n assertCondition(str.length >= min && str.length <= (max ?? min), 'string length is not between specified min and max');\n return str;\n};\n/**\n * pad a string with leading character\n * @param\t\tnbr\tinput value to pad\n * @param\t\tlen\tfill-length (default: 2)\n * @param\t\tfill\tcharacter (default \\ for string and \\ for number)\n * @returns\tfixed-length string padded on the left with fill-character\n */\nexport const pad = (nbr = 0, len = 2, fill) => nbr.toString().padStart(len, nullToValue(fill, isNumeric(nbr) ? '0' : ' ').toString());\n/** pad a string with non-blocking spaces, to help right-align a display */\nexport const padString = (str, pad = 6) => (isNumeric(str) ? asNumber(str).toFixed(2).toString() : str.toString() ?? '').padStart(pad, '\\u007F');\n//# sourceMappingURL=string.library.js.map","import { __esDecorate, __runInitializers } from \"tslib\";\nimport { secure } from '#library/utility.library.js';\nimport { Serializable } from '#library/class.library.js';\nimport { stringify } from '#library/serialize.library.js';\nimport { memoizeMethod } from '#library/function.library.js';\nimport { ownEntries } from '#library/reflection.library.js';\nimport { getProxy } from './proxy.library.js';\nimport { asType, isArray, isNumber } from '#library/type.library.js';\n/** used to identify the Enumify type */ const tag = 'Enumify';\n/** helper method to create a property descriptor */\nfunction value(val) {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n value: val\n };\n}\n/**\n * private instance of the Enum Prototype, which is then Used to create each new Object-Enum\n*/\nconst ENUM = secure(Object.create(null, {\n count: memoizeMethod('count', function () { return this.entries().length; }),\n keys: memoizeMethod('keys', function () { return this.entries().map(([key]) => key); }),\n values: memoizeMethod('values', function () { return this.entries().map(([_, val]) => val); }),\n entries: memoizeMethod('entries', function () { return ownEntries(this, true); }),\n invert: memoizeMethod('invert', function () { return enumify(this.entries().reduce((acc, [key, val]) => ({ ...acc, [val]: key }), {})); }),\n toString: memoizeMethod('toString', function () { return stringify(this.toJSON()); }),\n has: value(function (key) { return this.keys().includes(key); }),\n includes: value(function (search) { return this.values().includes(search); }),\n keyOf: value(function (search) { return this.invert()[search]; }),\n extend: value(function (list) { return enumify.call(this, list); }),\n forEach: value(function (fn, thisArg) { this.entries().forEach((entry, index) => fn.call(thisArg, entry, index, this)); }),\n filter: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => (fn.call(thisArg, entry, index, this) ? Object.assign(acc, { [entry[0]]: entry[1] }) : acc), {})); }),\n map: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => { const res = fn.call(thisArg, entry, index, this); return Object.assign(acc, isArray(res) && res.length === 2 ? { [res[0]]: res[1] } : { [entry[0]]: res }); }, {})); }),\n [Symbol.iterator]: value(function () { return this.entries()[Symbol.iterator](); }),\n [Symbol.toStringTag]: value(tag),\n}));\nexport function enumify(list) {\n const proto = this ?? ENUM;\n const arg = asType(list);\n let stash = {};\n switch (arg.type) {\n case 'Enumify':\n case 'Object':\n Object.assign(stash, arg.value);\n break;\n case 'Array':\n arg.value.forEach((key, index) => {\n if (isNumber(key))\n throw new Error('Enumify: numeric keys are not supported');\n Object.assign(stash, { [key]: index });\n });\n break;\n default:\n throw new Error(`Enumify: invalid argument type: ${arg.type}`);\n }\n const target = Object.create(proto, Object.getOwnPropertyDescriptors(stash));\n return getProxy(target);\n}\n/** create an entry in the Serialization Registry to describe how to rebuild an Enum */\nlet Enumify = (() => {\n let _classDecorators = [Serializable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Enumify = class {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Enumify = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n constructor(list) {\n return enumify(list);\n }\n };\n return Enumify = _classThis;\n})();\nexport { Enumify };\n//# sourceMappingURL=enumerate.library.js.map","import { enumify } from '#library/enumerate.library.js';\nimport { secure } from '#library/utility.library.js';\n/**\n * Various enumerations used throughout Tempo library.\n * These are exported and added as static getters of the Tempo class.\n * Usage example:\n * ```typescript\n * \t\t\tconst dayNames = Tempo.WEEKDAY.keys();\t// ['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n * ```\n */\n/** */\nexport const WEEKDAY = enumify(['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']);\nexport const WEEKDAYS = enumify(['Everyday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']);\nexport const MONTH = enumify(['All', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);\nexport const MONTHS = enumify(['Every', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nexport const SEASON = enumify({ Summer: 'summer', Autumn: 'autumn', Winter: 'winter', Spring: 'spring' });\nexport const COMPASS = enumify({ North: 'north', East: 'east', South: 'south', West: 'west' });\n/** number of seconds in a time unit */\nexport const DURATION = enumify({\n /** approx number of seconds in a year */ year: 31_536_000,\n /** approx number of seconds in a month */ month: 2_628_000,\n /** number of seconds in a week */ week: 604_800,\n /** number of seconds in a day */ day: 86_400,\n /** number of seconds in an hour */ hour: 3_600,\n /** number of seconds in a minute */ minute: 60,\n /** one second */ second: 1,\n /** number of seconds in a millisecond */ millisecond: .001,\n /** number of seconds in a microsecond */ microsecond: .000_001,\n /** number of seconds in a nanosecond */ nanosecond: .000_000_001,\n});\n/** number of milliseconds in a time unit */\nexport const DURATIONS = enumify({\n /** approx number of milliseconds in a year */ years: DURATION.year * 1_000,\n /** approx number of milliseconds in a month */ months: DURATION.month * 1_000,\n /** number of milliseconds in a week */ weeks: DURATION.week * 1_000,\n /** number of milliseconds in a day */ days: DURATION.day * 1_000,\n /** number of milliseconds in an hour */ hours: DURATION.hour * 1_000,\n /** number of milliseconds in a minute */ minutes: DURATION.minute * 1_000,\n /** number of milliseconds in a second */ seconds: DURATION.second * 1_000,\n /** one millisecond */ milliseconds: DURATION.millisecond * 1_000,\n /** number of milliseconds in a microsecond */ microseconds: DURATION.microsecond * 1_000,\n /** number of milliseconds in a nanosecond */ nanoseconds: Number((DURATION.nanosecond * 1_000).toPrecision(6)),\n});\n/** pre-defined Format code short-cuts */\nexport const FORMAT = enumify({\n /** useful for standard date display */ display: '{www}, {dd} {mmm} {yyyy}',\n /** useful for standard datestamps */ weekDate: '{www}, {yyyy}-{mmm}-{dd}',\n /** useful for standard timestamps */ weekTime: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}',\n /** useful for standard full timestamps */ weekStamp: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}',\n /** useful for readable month and day */ dayMonth: '{dd}-{mmm}',\n /** useful for Date */ dayDate: '{dd}-{mmm}-{yyyy}',\n /** display with Time */ dayTime: '{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}',\n /** useful for stamping logs */ logStamp: '{yyyy}{mm}{dd}T{hhmiss}.{ff}',\n /** useful for sorting display-strings */ sortTime: '{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}',\n /** useful for sorting week order */ yearWeek: '{wy}{ww}',\n /** useful for sorting month order */ yearMonth: '{yyyy}{mm}',\n /** useful for sorting date order */ yearMonthDay: '{yyyy}{mm}{dd}',\n /** just Date portion */ date: '{yyyy}-{mm}-{dd}',\n /** just Time portion */ time: '{hh}:{mi}:{ss}',\n});\nexport const LIMIT = secure({\n /** Tempo(31-Dec-9999.23:59:59).ns */ maxTempo: Temporal.Instant.from('9999-12-31T23:59:59.999999999+00:00').epochNanoseconds,\n /** Tempo(01-Jan-1000.00:00:00).ns */ minTempo: Temporal.Instant.from('1000-01-01T00:00+00:00').epochNanoseconds,\n});\nexport const ELEMENT = enumify({\n yy: 'year',\n mm: 'month',\n ww: 'week',\n dd: 'day',\n hh: 'hour',\n mi: 'minute',\n ss: 'second',\n ms: 'millisecond',\n us: 'microsecond',\n ns: 'nanosecond',\n});\nexport const MUTATION = enumify(ELEMENT.values()).extend(['event', 'period', 'clock', 'time', 'date', 'start', 'mid', 'end']);\nexport const ZONED_DATE_TIME = enumify(['value', 'timeZoneId', 'calendarId', 'monthCode', 'offset', 'timeZone']).extend(ELEMENT.values());\nexport const OPTION = enumify(['value', 'mdyLocales', 'mdyLayouts', 'store', 'discovery', 'debug', 'catch', 'timeZone', 'calendar', 'locale', 'pivot', 'sphere', 'timeStamp', 'snippet', 'layout', 'event', 'period', 'formats', 'plugins']);\nexport const PARSE = enumify(['mdyLocales', 'mdyLayouts', 'formats', 'pivot', 'snippet', 'layout', 'event', 'period', 'anchor', 'value', 'discovery', 'plugins']);\nexport const DISCOVERY = enumify(['options', 'timeZones', 'terms', 'plugins']);\n//# sourceMappingURL=tempo.enum.js.map","import { isDefined } from '#library/type.library.js';\nconst SCHEMA = [\n ['year', 'yy'],\n ['month', 'mm'],\n ['day', 'dd'],\n ['hour', 'hh'],\n ['minute', 'mi'],\n ['second', 'ss'],\n ['millisecond', 'ms'],\n ['microsecond', 'us'],\n ['nanosecond', 'ns']\n];\n/**\n * find where a Tempo fits within a range of DateTime\n */\nexport function getTermRange(tempo, list, keyOnly = true) {\n const sorted = [...list]\n .sortBy('year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond')\n .toReversed();\n const match = sorted\n .find(range => {\n for (const [rKey, sKey] of SCHEMA) {\n const val = range[rKey];\n if (isDefined(val)) {\n const sVal = tempo[sKey];\n if (sVal > val)\n return true;\n if (sVal < val)\n return false;\n }\n }\n return true; // fallback if DateTime exactly matches a range criteria\n })\n ?? sorted.at(0); // fallback to wraparound at first item\n return keyOnly\n ? match?.key\n : match;\n}\n//# sourceMappingURL=term.utils.js.map","import { cloneify } from '#library/serialize.library.js';\nimport { COMPASS } from '#tempo/tempo.config/tempo.enum.js';\nimport { getTermRange } from './term.utils.js';\n/** definition of fiscal quarter ranges */\nconst ranges = [\n [\n { key: 'Q1', day: 1, month: 1, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q2', day: 1, month: 4, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q3', day: 1, month: 7, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q4', day: 1, month: 10, fiscal: 0, sphere: COMPASS.North },\n ], [\n { key: 'Q1', day: 1, month: 7, fiscal: 1, sphere: COMPASS.South },\n { key: 'Q2', day: 1, month: 10, fiscal: 1, sphere: COMPASS.South },\n { key: 'Q3', day: 1, month: 1, fiscal: 0, sphere: COMPASS.South },\n { key: 'Q4', day: 1, month: 4, fiscal: 0, sphere: COMPASS.South },\n ]\n];\nexport const key = 'qtr';\nexport const scope = 'quarter';\nexport const description = 'Fiscal Quarter';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n const { yy, config: { sphere } } = this;\n const south = sphere !== COMPASS.North; // false = North, true = South\n const list = cloneify(ranges[+south]); // deep clone the range\n list.forEach(itm => itm.fiscal += yy); // calc the fiscal-year for quarter\n return getTermRange(this, list, keyOnly); // return the range\n}\n//# sourceMappingURL=term.quarter.js.map","import { cloneify } from '#library/serialize.library.js';\nimport { COMPASS } from '#tempo/tempo.config/tempo.enum.js';\nimport { getTermRange } from './term.utils.js';\n/** definition of meteorological season ranges */\nconst ranges = [\n [\n { key: 'Spring', day: 20, month: 3, symbol: 'Flower', sphere: COMPASS.North },\n { key: 'Summer', day: 21, month: 6, symbol: 'Sun', sphere: COMPASS.North },\n { key: 'Autumn', day: 23, month: 9, symbol: 'Leaf', sphere: COMPASS.North },\n { key: 'Winter', day: 22, month: 12, symbol: 'Snowflake', sphere: COMPASS.North },\n ], [\n { key: 'Spring', day: 1, month: 9, symbol: 'Flower', sphere: COMPASS.South },\n { key: 'Summer', day: 1, month: 12, symbol: 'Sun', sphere: COMPASS.South },\n { key: 'Autumn', day: 1, month: 3, symbol: 'Leaf', sphere: COMPASS.South },\n { key: 'Winter', day: 1, month: 6, symbol: 'Snowflake', sphere: COMPASS.South },\n ], [\n { key: 'Spring', day: 1, month: 3, symbol: 'Flower', trait: 'A time of renewal and growth' },\n { key: 'Summer', day: 1, month: 6, symbol: 'Sun', trait: 'A period of heat and fruition' },\n { key: 'Autumn', day: 1, month: 9, symbol: 'Leaf', trait: 'A time for harvest and contraction' },\n { key: 'Winter', day: 1, month: 12, symbol: 'Snowflake', trait: 'A period of stillness and consolidation' },\n ]\n];\nexport const key = 'szn';\nexport const scope = 'season';\nexport const description = 'Meteorlogical season';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n const { config: { sphere } } = this;\n const south = sphere !== COMPASS.North; // false = North, true = South\n const list = cloneify(ranges[+south]);\n if (!keyOnly) {\n const cn = getTermRange(this, ranges[2], false); // get the chinese season for the current day/month\n list.forEach(item => item['CN'] = cn); // add the chinese season to each range item\n }\n return getTermRange(this, list, keyOnly);\n}\n//# sourceMappingURL=term.season.js.map","import { getTermRange } from './term.utils.js';\nimport { cloneify } from '#library/serialize.library.js';\n/** definition of astrological zodiac ranges */\nconst ranges = [\n [\n { key: 'Aquarius', day: 20, month: 1, symbol: 'Ram', longitude: 300, planet: 'Uranus' },\n { key: 'Pisces', day: 19, month: 2, symbol: 'Fish', longitude: 330, planet: 'Neptune' },\n { key: 'Aries', day: 21, month: 3, symbol: 'Ram', longitude: 0, planet: 'Mars' },\n { key: 'Taurus', day: 20, month: 4, symbol: 'Bull', longitude: 30, planet: 'Venus' },\n { key: 'Gemini', day: 21, month: 5, symbol: 'Twins', longitude: 60, planet: 'Mercury' },\n { key: 'Cancer', day: 22, month: 6, symbol: 'Crab', longitude: 90, planet: 'Moon' },\n { key: 'Leo', day: 23, month: 7, symbol: 'Lion', longitude: 120, planet: 'Sun' },\n { key: 'Virgo', day: 23, month: 8, symbol: 'Maiden', longitude: 150, planet: 'Mercury' },\n { key: 'Libra', day: 23, month: 9, symbol: 'Scales', longitude: 180, planet: 'Venus' },\n { key: 'Scorpio', day: 23, month: 10, symbol: 'Scorpion', longitude: 210, planet: 'Pluto & Mars' },\n { key: 'Sagittarius', day: 22, month: 11, symbol: 'Centaur', longitude: 240, planet: 'Jupiter' },\n { key: 'Capricorn', day: 22, month: 12, symbol: 'Goat', longitude: 270, planet: 'Saturn' },\n ], [\n { key: 'Rat', traits: 'Adaptable, clever' },\n { key: 'Ox', traits: 'Diligent, strong' },\n { key: 'Tiger', traits: 'Passionate, courageous' },\n { key: 'Rabbit', traits: 'Artistic, gentle' },\n { key: 'Dragon', traits: 'Powerful, charismatic' },\n { key: 'Snake', traits: 'Wise, intuitive' },\n { key: 'Horse', traits: 'Energetic, independent' },\n { key: 'Goat', traits: 'Empathetic, calm' },\n { key: 'Monkey', traits: 'Smart, curious' },\n { key: 'Rooster', traits: 'Observant, hardworking' },\n { key: 'Dog', traits: 'Loyal, honest' },\n { key: 'Pig', traits: 'Compassionate, generous' },\n ], [\n { key: 'Wood' },\n { key: 'Fire' },\n { key: 'Earth' },\n { key: 'Metal' },\n { key: 'Water' },\n ]\n];\nexport const key = 'zdc';\nexport const scope = 'zodiac';\nexport const description = 'Astrological Zodiac sign';\n/** determine where the current Tempo instance fits within the above ranges */\nexport function define(keyOnly) {\n const list = cloneify(ranges[0]); // make a copy of the ranges array\n if (!keyOnly) {\n const cn = getChineseZodiac(this.yy); // get the chinese zodiac for the current year\n list.forEach(item => item['CN'] = cn); // add the chinese zodiac to each item\n }\n return getTermRange(this, list, keyOnly);\n}\n/** get the chinese zodiac for a given year */\nfunction getChineseZodiac(year) {\n const animalIndex = (year - 4) % 12; // calculate the animal index\n const elementIndex = Math.floor(((year - 4) % 10) / 2); // calculate the element index based on the last digit of the year\n const yinYang = year % 2 === 0 ? 'Yang' : 'Yin'; // determine Yin or Yang\n return {\n animal: ranges[1][animalIndex].key,\n traits: ranges[1][animalIndex].traits,\n element: ranges[2][elementIndex].key,\n yinYang: yinYang\n };\n}\n//# sourceMappingURL=term.zodiac.js.map","import { getTermRange } from './term.utils.js';\n/** definition of daily time periods */\nconst ranges = [\n { key: 'midnight', hour: 0 },\n { key: 'early', hour: 4 },\n { key: 'morning', hour: 8 },\n { key: 'midmorning', hour: 10 },\n { key: 'midday', hour: 12 },\n { key: 'afternoon', hour: 15, minute: 30 },\n { key: 'evening', hour: 18 },\n { key: 'night', hour: 20 },\n];\nexport const key = 'per';\nexport const scope = 'period';\nexport const description = 'Daily time period';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n return getTermRange(this, ranges, keyOnly);\n}\n//# sourceMappingURL=term.timeline.js.map","/**\n * Built-in term plugin registrations.\n *\n * This module exports a registration function to be called by tempo.class.ts.\n *\n * returns an array of Terms to be loaded into Tempo.#terms\n */\nimport * as qtr from './term.quarter.js';\nimport * as szn from './term.season.js';\nimport * as zdc from './term.zodiac.js';\nimport * as per from './term.timeline.js';\nexport default [\n { key: qtr.key, scope: qtr.scope, description: qtr.description, define: qtr.define },\n { key: szn.key, scope: szn.scope, description: szn.description, define: szn.define },\n { key: zdc.key, scope: zdc.scope, description: zdc.description, define: zdc.define },\n { key: per.key, scope: per.scope, description: per.description, define: per.define },\n];\n//# sourceMappingURL=term.import.js.map","import { looseIndex } from '#library/object.library.js';\nimport { secure } from '#library/utility.library.js';\n// BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW\n// TEMPO functionality heavily depends on these patterns\n/** common RegExp patterns */\nexport const Match = {\n /** match all {} pairs, if they start with a word char */ braces: /{([\\w]+(?:\\.[\\w]+)*)}/g,\n /** named capture-group, if it starts with a letter */ captures: /\\(\\?<([a-zA-Z][\\w]*)>(.*?)(?=) */ modifier: /[\\+\\-\\<\\>][\\=]?|this|next|prev|last/,\n /** offset post keywords (ago|hence) */ affix: /ago|hence/,\n /** strip out these characters from a string */ strips: /\\(|\\)/g,\n /** whitespace characters */ spaces: /\\s+/g,\n /** Z character */ zed: /^Z$/,\n};\n/** Tempo Symbol registry */\nexport const Token = looseIndex()({\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols\n /** year */ yy: Symbol('yy'),\n /** month */ mm: Symbol('mm'),\n /** day */ dd: Symbol('dd'),\n /** hour */ hh: Symbol('hh'),\n /** minute */ mi: Symbol('mi'),\n /** second */ ss: Symbol('ss'),\n /** fraction */ ff: Symbol('ff'),\n /** meridiem */ mer: Symbol('mer'),\n /** short weekday name */ www: Symbol('www'),\n /** relative-suffix */ afx: Symbol('afx'),\n /** time-suffix */ sfx: Symbol('sfx'),\n /** time unit */ unt: Symbol('unt'),\n /** separator */ sep: Symbol('sep'),\n /** modifier */ mod: Symbol('mod'),\n /** generic number */ nbr: Symbol('nbr'),\n /** Tempo event */ evt: Symbol('evt'),\n /** Tempo period */ per: Symbol('per'),\n /** time zone offset */ tzd: Symbol('tzd'),\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Layout Symbols\n /** date */ dt: Symbol('date'),\n /** time */ tm: Symbol('time'),\n /** date and time */ dtm: Symbol('dateTime'),\n /** day-month-year */ dmy: Symbol('dayMonthYear'),\n /** month-day-year */ mdy: Symbol('monthDayYear'),\n /** year-month-day */ ymd: Symbol('yearMonthDay'),\n /** day of month offset */ off: Symbol('offset'),\n /** weekDay */ wkd: Symbol('weekDay'),\n /** relative offset (years, days, hours, etc) */ rel: Symbol('relativeOffset'),\n /** timezone/calendar brackets */ brk: Symbol('brackets'),\n});\n/**\n * user will need to know these in order to configure their own patterns\n * Tempo.Snippet is a simple regex pattern object\t\t\t\t\t\te.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ }\n * Tempo.Layout is a string-combination of Snippet names\t\te.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?'\n * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex.\n * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument\n */\n/**\n * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy')\n */\n// Note: computed Components ('evt', 'per') are added during 'Tempo.init()' (for static) and/or 'new Tempo()' (per instance)\nexport const Snippet = looseIndex()({\n [Token.yy]: /(?([0-9]{2})?[0-9]{2})/, // arbitrary upper-limit of yy=9999\n [Token.mm]: /(?[0\\s]?[1-9]|1[0-2]|Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)/, // month-name (abbrev or full) or month-number 01-12\n [Token.dd]: /(?
[0\\s]?[1-9]|[12][0-9]|3[01])(?:\\s?(?:st|nd|rd|th))?/, // day-number 01-31\n [Token.hh]: /(?2[0-4]|[01]?[0-9])/, // hour-number 00-24\n [Token.mi]: /(\\:(?[0-5][0-9]))/, // minute-number 00-59\n [Token.ss]: /(\\:(?[0-5][0-9]))/, // seconds-number 00-59\n [Token.ff]: /(\\.(?[0-9]{1,9}))/, // fractional-seconds up-to 9-digits\n [Token.mer]: /(\\s*(?am|pm))/, // meridiem suffix (am,pm)\n [Token.sfx]: /((?:{sep}+|T)({tm}){tzd}?)/, // time-pattern suffix 'T {tm} Z'\n [Token.wkd]: /(?Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)/, // day-name (abbrev or full)\n [Token.tzd]: /(?Z|(?:\\+(?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:00)|-(?:(?:0[0-9]|1[0-1]):?[0-5][0-9]|12:00)))/, // time-zone offset\t+14:00 to -12:00\n [Token.nbr]: /(?[0-9]*)/, // modifier count\n [Token.afx]: new RegExp(`((s)? (?${Match.affix.source}))?{sep}?`), // affix optional plural 's' and (ago|hence)\n [Token.mod]: new RegExp(`((?${Match.modifier.source})?{nbr} *)`), // modifier (+,-,<,<=,>,>=) plus optional offset-count\n [Token.sep]: new RegExp(`(?:${Match.separator.source})`), // date-input separator character \"/\\\\-., \" (non-capture group)\n [Token.unt]: /(?year|month|week|day|hour|minute|second|millisecond)(?:s)?/, // useful for '2 days ago' etc\n [Token.brk]: /(\\[(?[^\\]]+)\\](?:\\[(?[^\\]]+)\\])?)?/, // timezone/calendar brackets [...]\n});\n/**\n * a {layout} is a Record of snippet-combinations describing an input DateTime argument\n * the Layout's keys are in the order that they will be checked against an input value\n */\nexport const Layout = looseIndex()({\n [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))', // calendar or event\n [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period\n [Token.dtm]: '({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?', // calendar/event and clock/period\n [Token.dmy]: '({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?', // day-month(-year)\n [Token.mdy]: '({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?', // month-day(-year)\n [Token.ymd]: '({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?', // year-month(-day)\n [Token.wkd]: '{mod}?{wkd}{afx}?{sfx}?', // special layout (no {dt}!) used for weekday calcs (only one that requires {wkd} pattern)\n [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset\n [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago)\n});\n/**\n * an {event} is a Record of regex-pattern-like-string keys that describe Date strings.\n * values can be a string or a function.\n * if assigning a function, use standard 'function()' syntax to allow for 'this' binding.\n * also, a function should always have a .toString() method which returns a parse-able Date string\n */\nexport const Event = looseIndex()({\n 'new.?years? ?eve': '31 Dec',\n 'nye': '31 Dec',\n 'new.?years?( ?day)?': '01 Jan',\n 'ny': '01 Jan',\n 'christmas ?eve': '24 Dec',\n 'christmas': '25 Dec',\n 'xmas ?eve': '24 Dec',\n 'xmas': '25 Dec',\n 'now': function () { return this.toPlainDateTime(); },\n 'today': function () { return this.toPlainDate(); },\n 'tomorrow': function () { return this.toPlainDate().add({ days: 1 }); },\n 'yesterday': function () { return this.toPlainDate().add({ days: -1 }); },\n});\n/**\n * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings.\n * values can be a string or a function.\n * if using a function, use regular 'function()' syntax to allow for 'this' binding.\n */\nexport const Period = looseIndex()({\n 'mid[ -]?night': '24:00',\n 'morning': '8:00',\n 'mid[ -]?morning': '10:00',\n 'mid[ -]?day': '12:00',\n 'noon': '12:00',\n 'after[ -]?noon': '3:00pm',\n 'evening': '18:00',\n 'night': '20:00',\n});\n/**\n * a {timeZone} alias dictionary mapping common abbreviations to IANA strings.\n * Tempo will check this registry to convert abbreviations before passing them to Temporal.\n */\nexport const TimeZone = looseIndex()({\n 'utc': 'UTC',\n 'gmt': 'Europe/London',\n 'est': 'America/New_York',\n 'cst': 'America/Chicago',\n 'mst': 'America/Denver',\n 'pst': 'America/Los_Angeles',\n 'aest': 'Australia/Sydney',\n 'acst': 'Australia/Adelaide',\n 'awst': 'Australia/Perth',\n 'nzt': 'Pacific/Auckland',\n 'cet': 'Europe/Paris',\n 'eet': 'Europe/Helsinki',\n 'ist': 'Asia/Kolkata',\n 'npt': 'Asia/Kathmandu',\n 'jst': 'Asia/Tokyo',\n});\n/** Reasonable default options for initial Tempo config */\nexport const Default = secure({\n /** log to console */ debug: false,\n /** catch or throw Errors */ catch: false,\n /** used to parse two-digit years*/ pivot: 75, /** @link https://en.wikipedia.org/wiki/Date_windowing */\n /** precision to measure timestamps (ms | us) */ timeStamp: 'ms',\n /** calendaring system */ calendar: 'iso8601',\n /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https://en.wikipedia.org/wiki/Date_format_by_country */\n /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']],\n});\n//# sourceMappingURL=tempo.default.js.map","import { asString } from '#library/coercion.library.js';\nimport { extract } from '#library/object.library.js';\nimport { ownEntries } from '#library/reflection.library.js';\nimport { stringify } from '#library/serialize.library.js';\nimport { isNumber, isDate, isTempo, isObject, isDefined, isUndefined, isFunction, nullToValue } from '#library/type.library.js';\n// adapted from https://jsbin.com/insert/4/edit?js,output\n/** insert a value into an Array by its sorted position */\nexport const sortInsert = (arr = [], val, key) => {\n const obj = isObject(val) && isDefined(key); // array of Objects\n let low = 0, high = arr.length;\n while (low < high) {\n const mid = (low + high) >>> 1; // divide by 2\n const source = obj\n ? arr[mid][key] // array of Object values\n : arr[mid]; // assume Primitive values\n const target = obj\n ? val[key]\n : val;\n if (source < target)\n low = mid + 1;\n else\n high = mid;\n }\n arr.splice(low, 0, val); // mutate original Array\n return arr;\n};\n/** provide a sort-function to order a set of keys */\nexport function sortBy(...keys) {\n const sortOptions = keys // coerce string => SortBy\n .flat() // flatten Array-of-Array\n .map(key => isObject(key) ? key : { field: stringify(key) }); // build Array of sort-options\n return (left, right) => {\n let result = 0; // 0 = same, -1 = leftright\n sortOptions.forEach(key => {\n if (result === 0) { // no need to look further if result !== 0\n const dir = key.dir === 'desc' ? -1 : 1;\n const field = key.field + (key.index ? `[${key.index}]` : '');\n const valueA = extract(left, field, nullToValue(key.default, 0));\n const valueB = extract(right, field, nullToValue(key.default, 0));\n switch (true) {\n case isNumber(valueA) && isNumber(valueB):\n case isDate(valueA) && isDate(valueB):\n case isTempo(valueA) && isTempo(valueB):\n result = dir * (valueA - valueB);\n break;\n default:\n result = dir * asString(valueA)?.localeCompare(asString(valueB));\n break;\n }\n }\n });\n return result;\n };\n}\n/** return an array sorted-by a series of keys */\nexport function sortKey(array, ...keys) {\n return array.sort(sortBy(...keys));\n}\nexport function byKey(arr, fnKey, ...keys) {\n if (isFunction(fnKey))\n return Object.groupBy(arr, fnKey);\n const keyed = [fnKey] // mapFn is a keyof T\n .concat(keys) // append any trailing keyof T[]\n .flat(); // flatten Array-of-Array\n return Object.groupBy(arr, itm => // group an array into an object with named keys\n keyed\n .map(key => isUndefined(itm[key]) ? '' : stringify(itm[key]))\n .join('.'));\n}\nexport function byLkp(arr, fnKey, ...keys) {\n const group = isFunction(fnKey)\n ? byKey(arr, fnKey) // group by the callback function\n : byKey(arr, fnKey, ...keys); // group by the list of keys\n return ownEntries(group)\n .reduce((acc, [key, grp]) => Object.assign(acc, { [key]: grp?.pop() }), {});\n}\n//# sourceMappingURL=array.library.js.map","import { trimAll, toProperCase } from '#library/string.library.js';\nimport { byKey, byLkp, sortKey } from '#library/array.library.js';\nimport { asArray } from '#library/coercion.library.js';\n// Prototype extensions\n// Remember to define any imports as a Function Declaration (not a Function Expression)\n// so that they are 'hoisted' prior to extending a prototype\n/**\n * extend an Object's prototype to include new method, if no clash\n */\nexport const patch = (proto, property, method) => {\n if (Object.hasOwn(proto.prototype, property)) { // if already defined,\n if (trimAll(method.toString()) !== trimAll(proto.prototype?.[property]?.toString()))\n console.warn(`${proto.name}.${property} already defined`); // show warning if different method definition\n }\n else {\n Object.defineProperty(proto.prototype, property, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: method,\n });\n }\n};\npatch(String, 'trimAll', function (pat) { return trimAll(this, pat); });\npatch(String, 'toProperCase', function () { return toProperCase(this); });\nfunction sorted(...keys) { return sortKey(this, ...keys); }\npatch(Array, 'orderBy', sorted); // order array by named keys\npatch(Array, 'sortBy', sorted); // sort array by named keys\nfunction keyed(...keys) { return byKey(this, ...keys); }\nfunction lookup(...keys) { return byLkp(this, ...keys); }\npatch(Array, 'keyedBy', keyed); // reduce array by named keys\npatch(Array, 'lookupBy', lookup); // reduce array by named keys, only one entry per key\npatch(Array, 'tap', function (fn) {\n fn(this); // run an arbitrary function\n return this; // then return the original array\n});\npatch(Array, 'clear', function () {\n this.fill(null).length = 0; // wipe the contents, then set the 'length' to zero\n return this;\n});\npatch(Array, 'distinct', function (mapfn) {\n return mapfn\n ? this.map(mapfn).distinct() // run the mapping selector, then recurse\n : Array.from(new Set(this)); // eliminate duplicates\n});\npatch(Array, 'cartesian', function (...args) {\n const [a, b = [], ...c] = args.length === 0 ? this : args;\n const cartFn = (a, b) => asArray([]).concat(...a.map(d => b.map(e => asArray([]).concat(d, e))));\n return b.length\n ? this.cartesian(cartFn(a, b), ...c) // run the cartFn function, then recurse\n : asArray(a || []); // return the collated result\n});\n//# sourceMappingURL=prototype.library.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport '#tempo/temporal.polyfill.js'; // side-effect runtime check for Temporal\n// #region library modules~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { Logify } from '#library/logify.class.js';\nimport { ifDefined } from '#library/object.library.js';\nimport { secure } from '#library/utility.library.js';\nimport { Immutable, Serializable } from '#library/class.library.js';\nimport { asArray, asNumber, asInteger, isNumeric, ifNumeric } from '#library/coercion.library.js';\nimport { cleanify, stringify } from '#library/serialize.library.js';\nimport { getStorage, setStorage } from '#library/storage.library.js';\nimport { ownKeys, ownEntries, getAccessors, omit } from '#library/reflection.library.js';\nimport { getProxy } from '#library/proxy.library.js';\nimport { getContext, CONTEXT } from '#library/utility.library.js';\nimport { pad, singular, toProperCase, trimAll } from '#library/string.library.js';\nimport { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#library/type.library.js';\nimport * as enums from '#tempo/tempo.config/tempo.enum.js';\nimport registerTerms from '#tempo/tempo.config/terms/term.import.js';\nimport { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#tempo/tempo.config/tempo.default.js';\nimport '#library/prototype.library.js'; // patch prototypes\n/** key to use for storage / globalThis Symbol */ export const $Tempo = Symbol.for('$Tempo');\n/** current execution context*/ const Context = getContext();\n// #region Const variables\n/**\n * # Tempo\n * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects.\n * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API.\n */\nlet Tempo = (() => {\n var _a, _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_getConfig;\n let _classDecorators = [Serializable, Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Tempo = _a = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Tempo\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Tempo = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n // #region Static enum properties~~~~~~~~~~~~~~~~~~~~~~~~~\n /** Weekday names (short-form) */ static get WEEKDAY() { return enums.WEEKDAY; }\n /** Weekday names (long-form) */ static get WEEKDAYS() { return enums.WEEKDAYS; }\n /** Month names (short-form) */ static get MONTH() { return enums.MONTH; }\n /** Month names (long-form) */ static get MONTHS() { return enums.MONTHS; }\n /** Time durations as seconds (singular) */ static get DURATION() { return enums.DURATION; }\n /** Time durations as milliseconds (plural) */ static get DURATIONS() { return enums.DURATIONS; }\n /** Quarterly Seasons */ static get SEASON() { return enums.SEASON; }\n /** Compass cardinal points */ static get COMPASS() { return enums.COMPASS; }\n /** Tempo to Temporal DateTime Units map */ static get ELEMENT() { return enums.ELEMENT; }\n /** Pre-configured format {name -> string} pairs */ static get FORMAT() { return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.formats; }\n /** some useful Dates */ static get LIMIT() { return enums.LIMIT; }\n static {\n // #endregion\n // #region Static private properties~~~~~~~~~~~~~~~~~~~~~~\n _Tempo_dbg = { value: new Logify('Tempo', {\n debug: Default?.debug ?? false,\n catch: Default?.catch ?? false\n }) };\n }\n static {\n /** Tempo state for the global configuration */ _Tempo_global = { value: {} };\n }\n static {\n /** a collection of parse rule-matches */ _Tempo_pending = { value: void 0 };\n }\n static {\n /** cache for next-available 'usr' Token key */ _Tempo_usrCount = { value: 0 };\n }\n static {\n /** mutable list of registered term plugins */ _Tempo_terms = { value: [] };\n }\n static {\n /** try to infer hemisphere using the timezone's daylight-savings setting */\n _Tempo_setSphere = { value: (shape, options) => {\n if (isUndefined(shape.config.timeZone) || __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, options, 'sphere'))\n return shape.config.sphere; // already specified or no timeZone to calculate from\n // use a fixed date (2024-01-01) to compare offsets for hemisphere detection\n const zdt = new Temporal.ZonedDateTime(BigInt(1_704_067_200) * BigInt(1_000_000_000), shape.config.timeZone);\n const jan = zdt.with({ day: 1, month: 1 }).offsetNanoseconds;\n const jun = zdt.with({ day: 1, month: 6 }).offsetNanoseconds;\n const dst = Math.sign(jan - jun); // timeZone offset difference between Jan and Jun\n switch (dst) {\n case -1:\n return Tempo.COMPASS.North; // clock moves backward in Northern hemisphere\n case 1:\n return Tempo.COMPASS.South; // clock moves forward in Southern hemisphere\n case 0:\n default:\n return void 0; // timeZone does not observe DST\n }\n } };\n }\n static {\n /** properCase week-day / calendar-month */\n _Tempo_prefix = { value: (str) => toProperCase(String(str).substring(0, 3)) };\n }\n static {\n /** get first Canonical name of a supplied locale */\n _Tempo_locale = { value: (locale) => {\n let language;\n try { // lookup locale\n language = Intl.getCanonicalLocales(locale.replace('_', '-'))[0];\n }\n catch (error) { } // catch unknown locale\n const global = Context.global;\n return language ??\n global?.navigator?.languages?.[0] ?? // fallback to current first navigator.languages[]\n global?.navigator?.language ?? // else navigator.language\n Default.locale ?? // else default locale\n locale; // cannot determine locale\n } };\n }\n static load(arg, options) {\n asArray(arg).flat(1).forEach(item => {\n if (isFunction(item)) {\n if (!item.installed) {\n item(options, this, (val) => new this(val)); // handle Plugins (Functional extension)\n item.installed = true;\n }\n }\n if (isObject(item) && isString(item.key) && isFunction(item.define)) {\n if (!__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).some(term => term.key === item.key))\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).push(item); // handle TermPlugins (Grammar extension)\n }\n if (isObject(item) && ownKeys(item).some(key => enums.DISCOVERY.has(key))) {\n globalThis[$Tempo] = item; // handle Discovery (Configuration bootstrapping)\n this.init();\n }\n });\n return this;\n }\n /**\n * Initializes the global default configuration for all subsequent `Tempo` instances.\n *\n * Settings are inherited in this priority:\n * 1. Reasonable library defaults (defined in tempo.config.js)\n * 2. Persistent storage (e.g. localStorage), if available.\n * 3. `options` provided to this method.\n *\n * @param options - Configuration overrides to apply globally.\n * @returns The resolved global configuration.\n */\n static init(options = {}) {\n if (isEmpty(options)) { // if no options supplied, reset all\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse = {\n snippet: Object.assign({}, Snippet),\n layout: Object.assign({}, Layout),\n event: Object.assign({}, Event),\n period: Object.assign({}, Period),\n mdyLocales: __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, Default.mdyLocales),\n mdyLayouts: asArray(Default.mdyLayouts),\n pivot: Default.pivot,\n };\n const { timeZone, calendar } = Intl.DateTimeFormat().resolvedOptions();\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config = Object.assign({}, omit({ ...Default }, ...enums.PARSE.keys()), // use Default as base, omit parse-related\n {\n calendar,\n timeZone,\n locale: __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_locale).call(Tempo),\n discovery: Symbol.keyFor($Tempo),\n formats: Object.create(enums.FORMAT),\n scope: 'global'\n });\n __classPrivateFieldSet(Tempo, _classThis, 0, \"f\", _Tempo_usrCount); // reset user-key counter\n for (const key of Object.keys(Token)) // purge user-allocated Tokens\n if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys\n delete Token[key];\n this.load(registerTerms); // register built-in term plugins\n const storeKey = Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), $Tempo));\n }\n else {\n const discovery = options.discovery ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.discovery ?? Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), discovery), options);\n }\n if (Context.type === CONTEXT.Browser || options.debug === true)\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(Tempo.config, 'Tempo:', __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n return Tempo.config;\n }\n /** release global config and reset library to defaults */\n static [(_Tempo_proto = function _Tempo_proto(obj) { return Object.getPrototypeOf(obj); }, _Tempo_hasOwn = function _Tempo_hasOwn(obj, key) { return Object.hasOwn(obj, key); }, _Tempo_isLocal = function _Tempo_isLocal(shape) { return shape.config.scope === 'local'; }, _Tempo_create = function _Tempo_create(obj, name) { return Object.create(__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, obj)[name]); }, _Tempo_setEvents = function _Tempo_setEvents(shape) {\n const events = ownEntries(shape.parse.event, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'event') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'isMonthDay'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = events\n .map(([pat, _], idx) => `(?<${src}evt${idx}>${pat})`) // assign a number to the pattern\n .join('|'); // make an 'Or' pattern for the event-keys\n if (groups) {\n const protoEvt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.evt]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoEvt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.evt, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n if (shape.parse.isMonthDay) {\n const protoDt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.layout)[Token.dt];\n const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})';\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || localDt !== protoDt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n shape.parse.layout = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'layout');\n Object.defineProperty(shape.parse.layout, Token.dt, {\n value: localDt,\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_setPeriods = function _Tempo_setPeriods(shape) {\n const periods = ownEntries(shape.parse.period, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'period'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = periods\n .map(([pat, _], idx) => `(?<${src}per${idx}>${pat})`) // {pattern} is the 1st element of the tuple\n .join('|'); // make an 'or' pattern for the period-keys\n if (groups) {\n const protoPer = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.per]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoPer) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.per, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_isMonthDay = function _Tempo_isMonthDay(shape) {\n const monthDay = [...asArray(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.mdyLocales)];\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales'))\n monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global)\n return monthDay.some(mdy => {\n const m = mdy;\n const tzs = m.timeZones ?? m.getTimeZones?.() ?? [];\n return tzs.includes(shape.config.timeZone);\n });\n }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) {\n const layouts = ownEntries(shape.parse.layout); // get entries of Layout Record\n const swap = shape.parse.mdyLayouts; // get the swap-tuple\n let chg = false; // no need to rebuild, if no change\n swap\n .forEach(([dmy, mdy]) => {\n const idx1 = layouts.findIndex(([key]) => key.description === dmy); // 1st swap element exists in {layouts}\n const idx2 = layouts.findIndex(([key]) => key.description === mdy); // 2nd swap element exists in {layouts}\n if (idx1 === -1 || idx2 === -1)\n return; // no pair to swap\n const swap1 = (idx1 < idx2) && shape.parse.isMonthDay; // we prefer {mdy} and the 1st tuple was found earlier than the 2nd\n const swap2 = (idx1 > idx2) && !shape.parse.isMonthDay; // we dont prefer {mdy} and the 1st tuple was found later than the 2nd\n if (swap1 || swap2) { // since {layouts} is an array, ok to swap by-reference\n [layouts[idx1], layouts[idx2]] = [layouts[idx2], layouts[idx1]];\n chg = true;\n }\n });\n if (chg)\n shape.parse.layout = Object.fromEntries(layouts); // rebuild Layout in new parse order\n }, _Tempo_setConfig = function _Tempo_setConfig(shape, ...options) {\n const mergedOptions = Object.assign({}, ...options);\n if (isEmpty(mergedOptions)) // nothing to do\n return;\n if (mergedOptions.store) // check for local-storage\n Object.assign(mergedOptions, { ...Tempo.readStore(mergedOptions.store), ...mergedOptions });\n /** helper to normalize snippet/layout Options into the target Config */\n const collect = (target, value, convert) => {\n const itm = asType(value);\n target ??= {};\n switch (itm.type) {\n case 'Object':\n ownEntries(itm.value)\n .forEach(([k, v]) => target[Tempo.getSymbol(k)] = convert(v));\n break;\n case 'String':\n case 'RegExp':\n target[Tempo.getSymbol()] = convert(itm.value);\n break;\n case 'Array':\n itm.value.forEach(elm => collect(target, elm, convert));\n break;\n }\n };\n ownEntries(mergedOptions)\n .forEach(([optKey, optVal]) => {\n if (isUndefined(optVal))\n return; // skip undefined values\n const arg = asType(optVal);\n switch (optKey) {\n case 'snippet':\n case 'layout':\n case 'event':\n case 'period':\n // lazy-shadowing: only create local object if it doesn't already exist on local shape\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, optKey))\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, optKey);\n const rule = shape.parse[optKey];\n if (['snippet', 'layout'].includes(optKey)) {\n collect(rule, arg.value, v => optKey === 'snippet'\n ? isRegExp(v) ? v : new RegExp(v)\n : isRegExp(v) ? v.source : v);\n }\n else {\n asArray(arg.value)\n .forEach(elm => ownEntries(elm).forEach(([key, val]) => rule[key] = val));\n }\n break;\n case 'mdyLocales':\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, arg.value);\n break;\n case 'mdyLayouts': // these are the 'layouts' that need to swap parse-order\n shape.parse[optKey] = asArray(arg.value);\n break;\n case 'pivot':\n shape.parse[\"pivot\"] = Number(arg.value);\n break;\n case 'config':\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, shape, arg.value);\n break;\n case 'timeZone':\n const zone = String(arg.value).toLowerCase();\n shape.config.timeZone = TimeZone[zone] ?? arg.value;\n break;\n case 'formats':\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.config, 'formats'))\n shape.config.formats = shape.config.formats.extend({}); // shadow parent prototype\n if (isObject(arg.value))\n shape.config.formats = shape.config.formats.extend(arg.value);\n break;\n case 'discovery':\n shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal;\n break;\n case 'plugins':\n asArray(optVal).forEach(p => this.load(p));\n break;\n case 'anchor':\n break; // internal anchor used for relativity parsing\n default: // else just add to config\n Object.assign(shape.config, { [optKey]: optVal });\n break;\n }\n });\n const isMonthDay = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isMonthDay).call(Tempo, shape);\n if (isMonthDay !== __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local'\n shape.parse.isMonthDay = isMonthDay;\n shape.config.sphere = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_setSphere).call(Tempo, shape, mergedOptions);\n if (isDefined(shape.parse.mdyLayouts))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_swapLayout).call(Tempo, shape);\n if (isDefined(shape.parse.event))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setEvents).call(Tempo, shape);\n if (isDefined(shape.parse.period))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPeriods).call(Tempo, shape);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPatterns).call(Tempo, shape); // setup Regex DateTime patterns\n }, _Tempo_mdyLocales = function _Tempo_mdyLocales(value) {\n return asArray(value)\n .map(mdy => new Intl.Locale(mdy))\n .map(mdy => ({ locale: mdy.baseName, timeZones: mdy.getTimeZones?.() ?? [] }));\n }, _Tempo_setDiscovery = function _Tempo_setDiscovery(shape, key = shape.config.discovery ?? $Tempo) {\n const sym = isString(key) ? Symbol.for(key) : key;\n const discovery = globalThis[sym];\n if (!isObject(discovery))\n return {};\n // 1. Process TimeZones (normalize to lowercase for lookup)\n const timeZones = discovery.timeZones ?? {};\n for (const [key, value] of Object.entries(timeZones))\n TimeZone[key.toLowerCase()] = value;\n // 2. Process Terms\n if (discovery.terms)\n this.load(asArray(discovery.terms));\n // 3. Process Formats\n if (discovery.formats)\n shape.config.formats = shape.config.formats.extend(discovery.formats);\n // 4. Process Plugins\n if (discovery.plugins)\n asArray(discovery.plugins).forEach(p => this.load(p));\n // 4. Process Options\n let opts = discovery.options || {};\n return isFunction(opts) ? opts() : opts;\n }, _Tempo_setPatterns = function _Tempo_setPatterns(shape) {\n const snippet = shape.parse.snippet;\n // if local and no snippet or layout overrides, we can just use the prototype's patterns\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n return;\n // ensure we have our own Map to mutate (shadow if local)\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'pattern'))\n shape.parse.pattern = new Map();\n shape.parse.pattern.clear(); // reset {pattern} Map\n for (const [sym, layout] of ownEntries(shape.parse.layout, true))\n shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet));\n }, Symbol.dispose)]() { Tempo.init(); }\n /** Reads options from persistent storage (e.g., localStorage). */\n static readStore(key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return getStorage(key, {});\n }\n /** Writes configuration into persistent storage. */\n static writeStore(config, key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return setStorage(key, config);\n }\n /** lookup or registers a new `Symbol` for a given key. */\n static getSymbol(key) {\n var _b, _c;\n if (isUndefined(key)) {\n const usr = `usr.${__classPrivateFieldSet(_b = Tempo, _classThis, (_c = __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_usrCount), ++_c), \"f\", _Tempo_usrCount)}`; // allocate a prefixed 'user' key\n return Token[usr] = Symbol(usr); // add to Symbol register\n }\n if (isSymbol(key))\n return key;\n if (isString(key) && key.includes('.')) {\n const description = key.split('.').pop(); // use last segment as description\n return Token[key] ??= Symbol(description);\n }\n return Token[key] ?? Symbol.for(`$Tempo.${key}`);\n }\n /** translates {layout} into an anchored, case-insensitive RegExp. */\n static regexp(layout, snippet) {\n // helper function to replace {name} placeholders with their corresponding snippets\n function matcher(str, depth = 0) {\n if (depth > 12)\n return isRegExp(str) ? str.source : str; // depth guard\n let source = isRegExp(str) ? str.source : str;\n if (isRegExpLike(source)) // string that looks like a RegExp\n source = source.substring(1, source.length - 1); // remove the leading/trailing \"/\"\n if (source.startsWith('^') && source.endsWith('$'))\n source = source.substring(1, source.length - 1); // remove the leading/trailing anchors (^ $)\n return source.replace(Match.braces, (match, name) => {\n const token = Tempo.getSymbol(name); // get the symbol for this {name}\n const customs = snippet?.[token]?.source ?? snippet?.[name]?.source;\n const globals = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[token]?.source ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[name]?.source;\n const layout = Layout[token]; // get resolution source (layout)\n let res = customs ?? globals ?? layout; // get the snippet/layout source\n if (isNullish(res) && name.includes('.')) { // if no definition found, try fallback\n const prefix = name.split('.')[0]; // get the base token name\n const pToken = Tempo.getSymbol(prefix);\n res = snippet?.[pToken]?.source ?? snippet?.[prefix]?.source\n ?? Snippet[pToken]?.source ?? Snippet[prefix]?.source\n ?? Layout[pToken];\n }\n if (res && name.includes('.')) { // wrap dotted extensions for identification\n const safeName = name.replace(/\\./g, '_');\n if (!res.startsWith(`(?<${safeName}>`))\n res = `(?<${safeName}>${res})`;\n }\n return (isNullish(res) || res === match) // if no definition found,\n ? match // return the original match\n : matcher(res, depth + 1); // else recurse to see if snippet contains embedded \"{}\" pairs\n });\n }\n layout = matcher(layout); // initiate the layout-parse\n return new RegExp(`^(${layout})$`, 'i'); // translate the source into a regex\n }\n /** Compares two `Tempo` instances or date-time values. */\n static compare(tempo1, tempo2) {\n const one = new Tempo(tempo1), two = new Tempo(tempo2);\n return Number((one.nano > two.nano) || -(one.nano < two.nano)) + 0;\n }\n /** global Tempo configuration */\n static get config() {\n return getProxy(omit({ ...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config }, 'value'));\n }\n /** global discovery configuration */\n static get discovery() {\n const sym = Symbol.for(this.config.discovery);\n return __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_getConfig).call(Tempo, sym);\n }\n /**\n * Returns a snapshot of the configuration layers used by Tempo.\n * Useful for debugging how the final configuration is built.\n */\n static get options() {\n const keyFor = this.config.store ?? Symbol.keyFor($Tempo);\n return {\n default: this.default,\n discovery: this.discovery,\n storage: getProxy(Object.assign({ key: keyFor, scope: 'storage' }, omit(Tempo.readStore(keyFor), 'value'))),\n global: this.config,\n };\n }\n static from(tempo, options) { return new this(tempo, options); }\n static now() { return Temporal.Now.instant().epochNanoseconds; }\n /** static Tempo.terms getter */\n static get terms() {\n return secure(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms)\n .map(({ define, ...rest }) => rest)); // omit the 'define' method\n }\n /** static Tempo properties getter */\n static get properties() {\n return secure(getAccessors(Tempo)\n .filter(acc => getType(acc) !== 'Symbol')); // omit any Symbol properties\n }\n /** Tempo initial default settings */\n static get default() {\n return secure({ ...Default, scope: 'default', timeZone: TimeZone });\n }\n /**\n * configuration governing the static 'rules' used when parsing Tempo.DateTime argument\n */\n static get parse() {\n const parse = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse;\n return secure({\n ...parse, // spread primitives like {pivot}\n snippet: { ...parse.snippet }, // spread nested objects\n layout: { ...parse.layout },\n event: { ...parse.event },\n period: { ...parse.period },\n mdyLocales: [...parse.mdyLocales],\n mdyLayouts: [...parse.mdyLayouts],\n });\n }\n /** iterate over Tempo properties */\n static [(_Tempo_getConfig = function _Tempo_getConfig(sym) {\n const discovery = globalThis[sym];\n return getProxy(omit({ ...discovery, scope: 'discovery' }, 'value'));\n }, Symbol.iterator)]() {\n return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters'\n }\n // #endregion Static public methods\n // #region Instance symbols~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** allow for auto-convert of Tempo to BigInt, Number or String */\n [Symbol.toPrimitive](hint) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.config, getType(this), '.hint: ', hint);\n switch (hint) {\n case 'string': return this.toString(); // ISO 8601 string\n case 'number': return this.epoch.ms; // Unix epoch (milliseconds)\n default: return this.nano; // Unix epoch (nanoseconds)\n }\n }\n /** iterate over instance formats */\n [Symbol.iterator]() {\n return ownEntries(this.#fmt)[Symbol.iterator](); // instance Iterator over tuple of FormatType[]\n }\n get [Symbol.toStringTag]() {\n return 'Tempo'; // hard-coded to avoid minification mangling\n }\n // #endregion Instance symbols\n // #region Instance properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** constructor tempo */ #tempo;\n /** constructor options */ #options = {};\n /** instantiation Temporal Instant */ #now;\n /** underlying Temporal ZonedDateTime */ #zdt;\n /** temporary anchor used during parsing */ #anchor;\n /** prebuilt formats, for convenience */ #fmt = {};\n /** instance term plugins */ #term = Object.create(null);\n /** instance values to complement static values */ #local = {\n /** instance configuration */ config: {},\n /** instance parse rules (only populated if provided) */ parse: { result: [] }\n };\n constructor(tempo, options = {}) {\n this.#now = Temporal.Now.instant(); // stash current Instant\n [this.#tempo, this.#options] = this.#swap(tempo, options); // swap arguments around, if arg1=Options or Temporal-like\n this.#setLocal(this.#options); // parse the local options looking for overrides to Tempo.#global.config\n // we now have all the info we need to instantiate a new Tempo\n try {\n this.#anchor = this.#options.anchor;\n this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg\n const cal = this.#local.config.calendar;\n if (isString(cal) && ['iso8601', 'gregory'].includes(cal)) {\n for (const key of this.#local.config.formats.keys())\n Object.assign(this.#fmt, { [key]: this.format(key) });\n }\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms) // add the plug-in getters for the pre-defined Terms to the instance\n .forEach(({ key, scope, define }) => {\n this.#setTerm(this, key, define, true); // add a getter which returns the key-field only\n this.#setTerm(this, scope, define, false); // add a getter which returns a range-object\n });\n if (isDefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) { // are we mutating with 'set()' ?\n this.#local.parse.result.unshift(...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending)); // prepend collected parse-matches\n __classPrivateFieldSet(Tempo, _classThis, void 0, \"f\", _Tempo_pending); // and reset mutating-flag\n }\n secure(this.#fmt); // prevent mutations\n secure(this.#term); // secure the initial object with getters\n secure(this.#local.config);\n secure(this.#local.parse);\n }\n catch (err) {\n console.error('Tempo Constructor Error:', err);\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.config, `Cannot create Tempo: ${err.message}\\n${err.stack}`);\n return {}; // return empty Object\n }\n }\n // This function has be defined within the Tempo class (and not imported from another module) because it references a private-variable\n /** this will add a getter on the instance #term private field */\n #setTerm(self, name, define, isKeyOnly) {\n if (isDefined(name) && isDefined(define)) {\n Object.defineProperty(self.#term, name, {\n configurable: false,\n enumerable: false,\n get: function () {\n const value = define.call(self, isKeyOnly); // evaluate the term range-lookup\n self.#term = secure(Object.create(self.#term, {\n [name]: {\n value,\n configurable: false,\n writable: false,\n enumerable: true\n }\n }));\n return secure(value);\n }\n });\n }\n }\n // #endregion Constructor\n // #region Instance public accessors~~~~~~~~~~~~~~~~~~~~~~\n /** 4-digit year (e.g., 2024) */ get yy() { return this.toDateTime().year; }\n /** 4-digit ISO week-numbering year */ get wy() { return this.ww === 1 && this.mm === Tempo.MONTH.Dec ? this.yy + 1 : (this.ww >= 52 && this.mm === Tempo.MONTH.Jan ? this.yy - 1 : this.yy); }\n /** Month number: Jan=1, Dec=12 */ get mm() { return this.toDateTime().month; }\n /** ISO week number of the year */ get ww() { return this.toDateTime().weekOfYear; }\n /** Day of the month (1-31) */ get dd() { return this.toDateTime().day; }\n /** Day of the month (alias for `dd`) */ get day() { return this.toDateTime().day; }\n /** Hour of the day (0-23) */ get hh() { return this.toDateTime().hour; }\n /** Minutes of the hour (0-59) */ get mi() { return this.toDateTime().minute; }\n /** Seconds of the minute (0-59) */ get ss() { return this.toDateTime().second; }\n /** Milliseconds of the second (0-999) */ get ms() { return this.toDateTime().millisecond; }\n /** Microseconds of the millisecond (0-999) */ get us() { return this.toDateTime().microsecond; }\n /** Nanoseconds of the microsecond (0-999) */ get ns() { return this.toDateTime().nanosecond; }\n /** Fractional seconds (e.g., 0.123456789) */ get ff() { return +(`0.${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`); }\n /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz() { return this.toDateTime().timeZoneId; }\n /** Unix timestamp (defaults to milliseconds) */ get ts() { return this.epoch[this.#local.config.timeStamp]; }\n /** Short month name (e.g., 'Jan') */ get mmm() { return Tempo.MONTH.keyOf(this.#zdt.month); }\n /** Full month name (e.g., 'January') */ get mon() { return Tempo.MONTHS.keyOf(this.#zdt.month); }\n /** Short weekday name (e.g., 'Mon') */ get www() { return Tempo.WEEKDAY.keyOf(this.#zdt.dayOfWeek); }\n /** Full weekday name (e.g., 'Monday') */ get wkd() { return Tempo.WEEKDAYS.keyOf(this.toDateTime().dayOfWeek); }\n /** ISO weekday number: Mon=1, Sun=7 */ get dow() { return this.toDateTime().dayOfWeek; }\n /** Nanoseconds since Unix epoch (BigInt) */ get nano() { return this.toDateTime().epochNanoseconds; }\n /** current Tempo configuration */\n get config() {\n return getProxy(omit({ ...this.#local.config }, 'scope', 'value', 'anchor'));\n }\n /** Instance-specific parse rules (merged with global) */ get parse() { return this.#local.parse; }\n /** Object containing results from all term plugins */ get term() { return getProxy(this.#term); }\n /** Formatted results for all pre-defined format codes */ get fmt() { return this.#fmt; }\n /** units since epoch */ get epoch() {\n return secure({\n /** seconds since epoch */ ss: Math.trunc(this.toDateTime().epochMilliseconds / 1_000),\n /** milliseconds since epoch */ ms: this.toDateTime().epochMilliseconds,\n /** microseconds since epoch */ us: Number(this.toDateTime().epochNanoseconds / BigInt(1_000)),\n /** nanoseconds since epoch */ ns: this.toDateTime().epochNanoseconds,\n });\n }\n // #endregion Instance public accessors\n // #region Instance private accessors\n /**\n * @Immutable class decorators wrap the class but leave internal lexical bindings pointing to the original, undecorated class.\n * To ensure new instances returned by instance methods are properly frozen,\n * we must instantiate internally from the decorated wrapper (which is bound to `this.constructor`)\n * rather than using `new Tempo(..)`.\n */\n get #Tempo() { return this.constructor; }\n /** time duration until another date-time */ until(optsOrDate, optsOrUntil) { return this.#until(optsOrDate, optsOrUntil); }\n /** time elapsed since another date-time */ since(optsOrDate, optsOrUntil) { return this.#since(optsOrDate, optsOrUntil); }\n /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt) { return this.#format(fmt); }\n /** returns a new `Tempo` with specific duration added. */ add(tempo, options) { return this.#add(tempo, options); }\n /** returns a new `Tempo` with specific offsets. */ set(tempo, options) { return this.#set(tempo, options); }\n /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config); }\n /** returns the underlying Temporal.ZonedDateTime */ toDateTime() { return this.#zdt ?? this.#anchor ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone); }\n /** returns a Temporal.PlainDate representation */ toPlainDate() { return this.toDateTime().toPlainDate(); }\n /** returns a Temporal.PlainTime representation */ toPlainTime() { return this.toDateTime().toPlainTime(); }\n /** returns a Temporal.PlainDateTime representation */ toPlainDateTime() { return this.toDateTime().toPlainDateTime(); }\n /** returns the underlying Temporal.Instant */ toInstant() { return this.toDateTime().toInstant(); }\n /** the date-time as a standard `Date` object. */ toDate() { return new Date(this.toDateTime().round({ smallestUnit: enums.ELEMENT.ms }).epochMilliseconds); }\n /** the ISO8601 string representation of the date-time. */ toString() { return this.toPlainDateTime().toString({ calendarName: 'never' }); }\n /** Custom JSON serialization for `JSON.stringify`. */ toJSON() { return omit({ ...this.#local.config, value: this.toString() }, 'scope', 'store'); }\n /** `true` if the underlying date-time is valid. */ isValid() { return !isEmpty(this); }\n // #endregion Instance public methods\n // #region Instance private methods~~~~~~~~~~~~~~~~~~~~~~~\n /** setup local 'config' and 'parse' rules (prototype-linked to global) */\n #setLocal(options) {\n // setup local config (prototype-linked to global config)\n this.#local.config = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n Object.assign(this.#local.config, { scope: 'local' });\n // setup local parse rules (prototype-linked to global parse)\n this.#local.parse = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse);\n this.#local.parse.result = [];\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, this.#local, options); // set #local config\n }\n /** parse DateTime input */\n #parse(tempo, dateTime) {\n const today = (dateTime ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone))\n .withTimeZone(this.#local.config.timeZone);\n const { type, value } = this.#conform(tempo, today, isDefined(dateTime));\n // evaluate latest timezone / calendar (after #conform which might have updated them)\n const { timeZone, calendar } = this.#local.config;\n const tz = isString(timeZone) ? timeZone : timeZone.id ?? timeZone.timeZoneId;\n const cal = isString(calendar) ? calendar : calendar.id ?? calendar.calendarId;\n if (isEmpty(this.#local.parse.result) && isUndefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) // #conform() didn't find any matches\n this.#local.parse.result = [{ type, value }];\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'parse', `{type: ${type}, value: ${value}}`); // show what we're parsing\n switch (type) {\n case 'Null':\n case 'Void':\n case 'Empty':\n case 'Undefined':\n return today;\n case 'String': // String which didn't conform to a Tempo.pattern\n try {\n const str = value.replace(/Z$/, ''); // requested Z-stripping for adoption\n const zdt = Temporal.ZonedDateTime.from(str.includes('[') ? str : `${str}[${tz}]`);\n if (this.#local)\n this.#local.config.timeZone = zdt.timeZoneId;\n return zdt;\n }\n catch (err) { // else see if Date.parse can parse value\n this.#result({ type: 'String', value }, { match: 'Date.parse' });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, 'Cannot detect DateTime; fallback to Date.parse');\n if (Match.date.test(value)) {\n try {\n return Temporal.PlainDate.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback */ }\n }\n try {\n return Temporal.PlainDateTime.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback to Date.parse */ }\n const date = new Date(value.toString());\n if (isNaN(date.getTime()))\n return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot parse Date: \"${value}\"`);\n return Temporal.ZonedDateTime // adopt instance timezone\n .from(`${date.toISOString().substring(0, 23)}[${tz}]`)\n .withCalendar(cal);\n }\n case 'Temporal.ZonedDateTime': // ZonedDateTime object: convert to instance timezone\n return (value.timeZoneId === tz && value.calendarId === cal)\n ? value\n : value.withTimeZone(tz).withCalendar(cal);\n case 'Temporal.PlainDate':\n case 'Temporal.PlainDateTime':\n return value\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainTime':\n return today.withPlainTime(value);\n case 'Temporal.PlainYearMonth': // assume current day, else end-of-month\n return value\n .toPlainDate({ day: Math.min(today.day, value.daysInMonth) })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainMonthDay': // assume current year\n return value\n .toPlainDate({ year: today.year })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.Instant':\n return value\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Tempo':\n return value\n .toDateTime()\n .withTimeZone(tz)\n .withCalendar(cal); // apply instance timezone to cloned Tempo\n case 'Date':\n return Temporal.Instant.fromEpochMilliseconds(value.getTime())\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Number': // Number which didn't conform to a Tempo.pattern\n const [seconds = BigInt(0), suffix = BigInt(0)] = value.toString().split('.').map(BigInt);\n const nano = BigInt(suffix.toString().substring(0, 9).padEnd(9, '0'));\n return Temporal.Instant.fromEpochNanoseconds(seconds * BigInt(1_000_000_000) + nano)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'BigInt': // BigInt is not conformed against a Tempo.pattern\n return Temporal.Instant.fromEpochNanoseconds(value)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected Tempo parameter type: ${type}, ${String(value)}`);\n return today;\n }\n }\n /** resolve constructor / method arguments */\n #swap(tempo, options = {}) {\n return this.#isOptions(tempo)\n ? [tempo.value, { ...tempo }]\n : [tempo, { ...options }];\n }\n /** check if we've been given a Tempo Options object */\n #isOptions(arg) {\n if (!isObject(arg) || arg.constructor !== Object)\n return false;\n const keys = ownKeys(arg); // if it contains any 'mutation' keys, then it's not (just) an options object\n if (keys.some(key => enums.MUTATION.has(key)))\n return false;\n return keys\n .some(key => enums.OPTION.has(key));\n }\n /** check if we've been given a ZonedDateTimeLike object */\n #isZonedDateTimeLike(tempo) {\n if (!isObject(tempo) || isEmpty(tempo))\n return false;\n // if it contains any 'options' keys, it's not a ZonedDateTime\n const keys = ownKeys(tempo);\n if (keys.some(key => enums.OPTION.has(key) && key !== 'value'))\n return false;\n // we include {value} to allow for Tempo instances\n return keys\n .filter(isString)\n .every((key) => enums.ZONED_DATE_TIME.has(key));\n }\n #result(...rest) {\n const match = Object.assign({}, ...rest); // collect all object arguments\n if (!isEmpty(match.groups)) {\n if (isDefined(this.#anchor) && !match.isAnchored)\n match.isAnchored = true;\n (__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending) ?? this.#local.parse.result).push(match);\n }\n }\n /** evaluate 'string | number' input against known patterns */\n #conform(tempo, dateTime, isAnchored = false) {\n const arg = asType(tempo);\n const { type, value } = arg;\n if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property)\n const { timeZone, calendar, value, ...options } = tempo;\n let zdt = !isEmpty(options)\n ? dateTime.with(options)\n : dateTime;\n if (timeZone)\n zdt = zdt.withTimeZone(timeZone); // optionally set timeZone\n if (calendar)\n zdt = zdt.withCalendar(calendar); // optionally set calendar\n this.#result({ type: 'Temporal.ZonedDateTimeLike', value: zdt, match: 'Temporal.ZonedDateTimeLike' });\n return Object.assign(arg, {\n type: 'Temporal.ZonedDateTime', // override {arg.type}\n value: zdt,\n });\n }\n if (type !== 'String' && type !== 'Number') {\n this.#result(arg, { match: type });\n return arg;\n }\n if (isFunction(value)) {\n const res = value.call(this);\n return this.#conform(res, dateTime, isAnchored);\n }\n const trim = trimAll(value);\n if (type === 'String') { // if original value is String\n if (isEmpty(trim)) { // don't conform empty string\n this.#result(arg, { match: 'Empty' });\n return Object.assign(arg, { type: 'Empty' });\n }\n if (isIntegerLike(trim)) { // if string representation of BigInt literal\n this.#result(arg, { match: 'BigInt' });\n return Object.assign(arg, { type: 'BigInt', value: asInteger(trim) });\n }\n }\n else { // else it is a Number\n if (trim.length <= 7) { // cannot reliably interpret small numbers: might be {ss} or {yymmdd} or {dmmyyyy}\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, 'Cannot safely interpret number with less than 8-digits: use string instead');\n return arg;\n }\n }\n // const isSimpleIsoOrNumeric = typeof value === 'string' && (Match.date.test(value) || /^\\d+$/.test(value));\n const map = this.#local.parse.pattern;\n for (const [sym, pat] of map) {\n const groups = this.#parseMatch(pat, trim); // determine pattern-match groups\n if (isEmpty(groups))\n continue; // no match, so skip this iteration\n this.#result(arg, { match: sym.description, groups: cleanify(groups) }); // stash the {key} of the pattern that was matched\n dateTime = this.#parseZone(groups, dateTime); // resolve timezone early so events can use it\n dateTime = this.#parseGroups(groups, dateTime); // mutate the {groups} object (resolves events/periods)\n dateTime = this.#parseWeekday(groups, dateTime); // if {weekDay} pattern, calculate a calendar value\n dateTime = this.#parseDate(groups, dateTime); // if {calendar}|{event} pattern, translate to date value\n dateTime = this.#parseTime(groups, dateTime); // if {clock}|{period} pattern, translate to a time value\n /**\n * finished analyzing a matched pattern.\n * rebuild {arg.value} into a ZonedDateTime\n */\n // if no time-components were matched, strip time to midnight baseline\n if (!isAnchored && !['hh', 'mi', 'ss', 'ff', 'mer', 'per'].some(key => isDefined(groups[key])))\n dateTime = dateTime.withPlainTime('00:00:00');\n Object.assign(arg, { type: 'Temporal.ZonedDateTime', value: dateTime });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'groups', groups); // show the resolved date-time elements\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'pattern', sym.description); // show the pattern that was matched\n break; // stop checking patterns\n }\n return arg;\n }\n /** apply a regex-match against a value, and clean the result */\n #parseMatch(pat, value) {\n const groups = value.toString().match(pat)?.groups || {};\n ownEntries(groups) // remove undefined, NaN, null and empty values\n .forEach(([key, val]) => isEmpty(val) && delete groups[key]);\n return groups;\n }\n /** resolve {event} | {period} to their date | time values (mutates groups) */\n #parseGroups(groups, dateTime) {\n this.#anchor = dateTime; // temporarily anchor the instance so events resolve relative to current state\n try {\n for (const key of ownKeys(groups)) {\n const isEvent = Match.event.test(key);\n const isPeriod = Match.period.test(key);\n if (!isEvent && !isPeriod)\n continue;\n const idx = +key.substring(4);\n const src = key.startsWith('g') ? (isEvent ? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.event : __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.period) : (isEvent ? this.#local.parse.event : this.#local.parse.period);\n const entry = ownEntries(src, true)[idx];\n if (!entry)\n continue;\n const definition = entry[1];\n const res = isFunction(definition) ? definition.call(this).toString() : definition;\n const resGroups = isEvent ? this.#parseEvent(res) : this.#parsePeriod(res);\n Object.assign(groups, resGroups);\n delete groups[key];\n }\n }\n finally {\n this.#anchor = undefined; // reset anchor\n }\n // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date)\n if (isDefined(groups[\"mm\"]) && !isNumeric(groups[\"mm\"])) {\n const mm = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, groups[\"mm\"]); // conform month-name\n groups[\"mm\"] = Tempo.MONTH.keys().findIndex((el) => el === mm).toString().padStart(2, '0');\n }\n // Apply mutated groups to dateTime\n if (isDefined(groups.yy) || isDefined(groups.mm) || isDefined(groups.dd))\n dateTime = this.#parseDate(groups, dateTime);\n if (isDefined(groups.hh) || isDefined(groups.mi) || isDefined(groups.ss) || isDefined(groups.ff) || isDefined(groups.mer))\n dateTime = this.#parseTime(groups, dateTime);\n return dateTime;\n }\n /**\n * We expect similar offset-logic to apply to 'modifiers' when parsing a string DateTime.\n * returns {adjust} to make, based on {modifier}, {offset}, and {period}\n * -\t\t\tprevious period\n * +\t\t\tnext period\n * -3\t\t\tthree periods ago\n * <\t\t\tprior to base-date (asIs)\n * <=\t\t\tprior to base-date (plus one)\n */\n #parseModifier({ mod, adjust, offset, period }) {\n adjust = Math.abs(adjust);\n switch (mod) {\n case void 0: // no adjustment\n case '=':\n case 'this': // current period\n return 0;\n case '+': // next period\n case 'next':\n return adjust;\n case '-': // previous period\n case 'prev':\n case 'last':\n return -adjust;\n case '<': // period before base-date\n case 'ago':\n return (period <= offset)\n ? -adjust\n : -(adjust - 1);\n case '<=': // period before or including base-date\n case '-=':\n return (period < offset)\n ? -adjust\n : -(adjust - 1);\n case '>': // period strictly after base-date\n case 'hence':\n return (period >= offset)\n ? adjust\n : (adjust - 1);\n case '>=': // period after or including base-date\n case '+=':\n return (period > offset)\n ? adjust\n : (adjust - 1);\n default: // unexpected modifier\n return 0;\n }\n }\n /**\n * if named-group 'wkd' detected (with optional 'mod', 'nbr', 'sfx' or time-units), then calc relative weekday offset\n * | Example | Result | Note |\n * | :--- | :---- | :---- |\n * | `Wed` | Wed this week | might be earlier or later or equal to current day |\n * | `-Wed` | Wed last week | same as new Tempo('Wed').add({ weeks: -1 }) |\n * | `+Wed` | Wed next week | same as new Tempo('Wed').add({ weeks: 1 }) |\n * | `-3Wed` | Wed three weeks ago | same as new Tempo('Wed').add({ weeks: -3 }) |\n * | `', hh: '10', mer: 'pm'}\n * we early-exit if we find anything other than time-units\n */\n const time = ['hh', 'mi', 'ss', 'ms', 'us', 'ns', 'ff', 'mer'];\n if (!ownKeys(rest)\n .every(key => time.includes(key))) // non 'time-unit' keys detected\n return dateTime; // this is not a true {weekDay} pattern, so early-exit\n if (!isEmpty(mod) && !isEmpty(sfx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${sfx}'`);\n return dateTime; // cannot provide both 'modifier' and 'suffix'\n }\n const weekday = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, wkd); // conform weekday-name\n const adjust = +nbr; // how many weeks to adjust\n const offset = Tempo.WEEKDAY.keys() // how far weekday is from today\n .findIndex((el) => el === weekday);\n const days = offset - dateTime.dayOfWeek // number of days to offset from dateTime\n + (this.#parseModifier({ mod: mod ?? sfx, adjust, offset, period: dateTime.dayOfWeek }) * dateTime.daysInWeek);\n delete groups[\"wkd\"];\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"sfx\"];\n return dateTime\n .add({ days }); // set new {day}\n }\n /**\n * match input against date patterns\n * @returns adjusted ZonedDateTime with resolved time-components\n */\n #parseDate(groups, dateTime) {\n const { mod, nbr = '1', afx, unt, yy, mm, dd } = groups;\n if (isEmpty(yy) && isEmpty(mm) && isEmpty(dd) && isUndefined(unt))\n return dateTime; // return default\n if (!isEmpty(mod) && !isEmpty(afx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${afx}'`);\n return dateTime;\n }\n let { year, month, day } = this.#num({\n year: yy ?? dateTime.year, // supplied year, else current year\n month: mm ?? dateTime.month, // supplied month, else current month\n day: dd ?? dateTime.day, // supplied day, else current day\n });\n // handle {unt} relative offset (e.g. '2 days ago')\n if (unt) {\n const adjust = +nbr;\n const direction = (mod === '<' || mod === '-' || afx === 'ago') ? -1 : 1;\n const plural = singular(unt) + 's';\n dateTime = dateTime.add({ [plural]: adjust * direction });\n delete groups[\"unt\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n delete groups[\"mod\"];\n return dateTime;\n }\n // convert 2-digit year to 4-digits using 'pivot-year' (relative to current century)\n if (year.toString().match(Match.twoDigit)) { // if {year} match just-two digits\n const pivot = dateTime\n .subtract({ years: this.#local.parse[\"pivot\"] }) // pivot cutoff to determine century\n .year % 100; // remainder \n const century = Math.trunc(dateTime.year / 100); // current century\n year += (century - Number(year >= pivot)) * 100; // now a four-digit year\n }\n // adjust the {year} if a Modifier is present\n const adjust = +nbr; // how many years to adjust\n const offset = Number(pad(month) + '.' + pad(day)); // the event month.day\n const period = Number(pad(dateTime.month) + '.' + pad(dateTime.day + 1));\n year += this.#parseModifier({ mod: mod ?? afx, adjust, offset, period });\n Object.assign(groups, { yy: year, mm: month, dd: day });\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n // all date-components are now set; check for overflow in case past end-of-month\n return Temporal.PlainDate.from({ year, month, day }, { overflow: 'constrain' })\n .toZonedDateTime(dateTime.timeZoneId) // adjust to constrained date\n .withPlainTime(dateTime.toPlainTime()); // restore the time\n }\n /** match input against 'tm' pattern (returns adjusted ZonedDateTime) */\n #parseTime(groups = {}, dateTime) {\n if (isUndefined(groups[\"hh\"])) // must contain 'time' with at least {hh}\n return dateTime;\n let { hh = 0, mi = 0, ss = 0, ms = 0, us = 0, ns = 0 } = this.#num(groups);\n if (hh >= 24) {\n dateTime = dateTime.add({ days: Math.trunc(hh / 24) }); // move the date forward number of days to offset\t\t\t\t\t\t\t\t\n hh %= 24; // midnight is '00:00' on the next-day\n }\n if (isDefined(groups[\"ff\"])) { // {ff} is fractional seconds and overrides {ms|us|ns}\n const ff = groups[\"ff\"].substring(0, 9).padEnd(9, '0');\n ms = +ff.substring(0, 3);\n us = +ff.substring(3, 6);\n ns = +ff.substring(6, 9);\n }\n if (groups[\"mer\"]?.toLowerCase() === 'pm' && hh < 12 && (hh + mi + ss + ms + us + ns) > 0)\n hh += 12; // anything after midnight and before midday\n if (groups[\"mer\"]?.toLowerCase() === 'am' && hh >= 12)\n hh -= 12; // anything after midday\n return dateTime // return the computed time-values\n .withPlainTime({ hour: hh, minute: mi, second: ss, millisecond: ms, microsecond: us, nanosecond: ns });\n }\n /**\n * apply a timezone or calendar bracket to the current ZonedDateTime\n * normalization is applied to ensure 'Z' is treated as 'UTC'\n */\n #parseZone(groups, dateTime) {\n const tzd = groups[\"tzd\"]?.replace(Match.zed, 'UTC'); // normalize timezone/offset\n const brk = groups[\"brk\"]?.replace(Match.zed, 'UTC'); // handle bracketed timezone\n const zone = brk || tzd;\n if (zone && zone !== dateTime.timeZoneId && !zone.startsWith('u-ca=')) {\n if (this.#local)\n this.#local.config.timeZone = zone; // update local config if exists\n dateTime = dateTime.toPlainDateTime().toZonedDateTime(zone); // adopt timezone override (stable)\n }\n const cal = groups[\"cal\"];\n if (cal && cal !== dateTime.calendarId) {\n const calendar = cal.startsWith('u-ca=') ? cal.substring(5) : cal;\n this.#local.config.calendar = calendar;\n dateTime = dateTime.withCalendar(calendar);\n }\n delete groups[\"brk\"];\n delete groups[\"cal\"];\n delete groups[\"tzd\"];\n return dateTime;\n }\n /** match an {event} string against a date pattern */\n #parseEvent(evt) {\n const groups = {};\n const pats = this.#local.parse.isMonthDay // first find out if we have a US-format timeZone\n ? ['mdy', 'dmy', 'ymd'] // if so, try {mdy} before {dmy}\n : ['dmy', 'mdy', 'ymd']; // else try {dmy} before {mdy}\n for (const pat of pats) {\n const reg = this.#getPattern(pat);\n if (isDefined(reg)) {\n const match = this.#parseMatch(reg, evt);\n if (!isEmpty(match)) {\n this.#result({ type: 'Event', value: evt, match: pat, groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n if (!isEmpty(groups))\n break; // return on the first matched pattern\n }\n return groups; // overlay the match date-components\n }\n /** match a {period} string against the time pattern */\n #parsePeriod(per) {\n const groups = {};\n const tm = this.#getPattern('tm'); // get the RegExp for the time-pattern\n if (isDefined(tm)) {\n const match = this.#parseMatch(tm, per);\n if (!isEmpty(match)) {\n this.#result({ type: 'Period', value: per, match: 'tm', groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n return groups;\n }\n /** lookup the RegExp for a given pattern name */\n #getPattern(pat) {\n const reg = this.#local.parse.pattern.get(Tempo.getSymbol(pat));\n if (isUndefined(reg))\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot find pattern: \"${pat}\"`);\n return reg;\n }\n /** return a new object, with only numeric values */\n #num = (groups) => {\n return ownEntries(groups)\n .reduce((acc, [key, val]) => {\n if (isNumeric(val))\n acc[key] = asNumber(val);\n return acc;\n }, {});\n };\n /** mutate the date-time by adding a duration */\n #add = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n const mutate = 'add';\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [unit, offset]) => {\n if (unit === 'timeZone' || unit === 'calendar')\n return zdt;\n const single = singular(unit);\n const plural = single + 's';\n switch (`${mutate}.${single}`) {\n case 'add.year':\n case 'add.month':\n case 'add.week':\n case 'add.day':\n case 'add.hour':\n case 'add.minute':\n case 'add.second':\n case 'add.millisecond':\n case 'add.microsecond':\n case 'add.nanosecond':\n return zdt\n .add({ [plural]: offset });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`);\n return zdt;\n }\n }, zdt);\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n /** mutate the date-time by setting specific offsets */\n #set = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n if (args.timeZone)\n overrides.timeZone = args.timeZone;\n if (args.calendar)\n overrides.calendar = args.calendar;\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [key, adjust]) => {\n if (key === 'timeZone' || key === 'calendar')\n return zdt;\n const { mutate, offset, single } = ((key) => {\n switch (key) {\n case 'start':\n case 'mid':\n case 'end':\n return { mutate: key, offset: 0, single: singular(adjust?.toString() ?? '') };\n default:\n return { mutate: 'set', offset: adjust, single: singular(key) };\n }\n })(key); // IIFE to analyze arguments\n switch (`${mutate}.${single}`) {\n case 'set.timeZone':\n return zdt.withTimeZone(offset);\n case 'set.calendar':\n return zdt.withCalendar(offset);\n case 'set.period':\n case 'set.time':\n case 'set.date':\n case 'set.event':\n case 'set.dow': // set day-of-week by number\n case 'set.wkd': // set day-of-week by name\n return this.#parse(offset, zdt);\n case 'set.year':\n case 'set.month':\n // case 'set.week':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.day':\n case 'set.hour':\n case 'set.minute':\n case 'set.second':\n case 'set.millisecond':\n case 'set.microsecond':\n case 'set.nanosecond':\n return zdt\n .with({ [single]: offset });\n case 'set.yy':\n case 'set.mm':\n // case 'set.ww':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.dd':\n case 'set.hh':\n case 'set.mi':\n case 'set.ss':\n case 'set.ms':\n case 'set.us':\n case 'set.ns':\n const value = Tempo.ELEMENT[single];\n return zdt\n .with({ [value]: offset });\n case 'start.year':\n return zdt\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay();\n case 'start.term': // TODO\n return zdt;\n case 'start.month':\n return zdt\n .with({ day: 1 })\n .startOfDay();\n case 'start.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) })\n .startOfDay();\n case 'start.day':\n return zdt\n .startOfDay();\n case 'start.hour':\n case 'start.minute':\n case 'start.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'trunc' });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'mid.year':\n return zdt\n .with({ month: Tempo.MONTH.Jul, day: 1 })\n .startOfDay();\n case 'mid.term': // TODO: relevant?\n return zdt;\n case 'mid.month':\n return zdt\n .with({ day: Math.trunc(zdt.daysInMonth / 2) })\n .startOfDay();\n case 'mid.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) })\n .startOfDay();\n case 'mid.day':\n return zdt\n .round({ smallestUnit: 'day', roundingMode: 'trunc' })\n .add({ hours: 12 });\n case 'mid.hour':\n return zdt\n .round({ smallestUnit: 'hour', roundingMode: 'trunc' })\n .add({ minutes: 30 });\n case 'mid.minute':\n return zdt\n .round({ smallestUnit: 'minute', roundingMode: 'trunc' })\n .add({ seconds: 30 });\n case 'mid.second':\n return zdt\n .round({ smallestUnit: 'second', roundingMode: 'trunc' })\n .add({ milliseconds: 500 });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'end.year':\n return zdt\n .add({ years: 1 })\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.term': // TODO\n return zdt\n .subtract({ nanoseconds: 1 });\n case 'end.month':\n return zdt\n .add({ months: 1 })\n .with({ day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.week':\n return zdt\n .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.day':\n case 'end.hour':\n case 'end.minute':\n case 'end.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'ceil' })\n .subtract({ nanoseconds: 1 });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`);\n return zdt;\n }\n }, zdt); // start reduce with the shifted zonedDateTime\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n #format = (fmt) => {\n if (isNull(this.#tempo))\n return undefined; // don't format dates\n const obj = this.#local.config.formats;\n let template = (isString(fmt) && obj.has(fmt))\n ? obj[fmt]\n : String(fmt);\n // auto-meridiem: if {HH} is present and {mer} is absent, append it after the last time component\n if (template.includes('{HH}') && !template.includes('{mer}') && !template.includes('{MER}')) {\n const index = Math.max(template.lastIndexOf('{HH}'), template.lastIndexOf('{mi}'), template.lastIndexOf('{ss}'));\n if (index !== -1) {\n const end = template.indexOf('}', index) + 1;\n template = template.slice(0, end) + '{mer}' + template.slice(end);\n }\n }\n const result = template.replace(Match.braces, (_match, token) => {\n switch (token) {\n case 'wy': return pad(this.wy, 4);\n case 'yyww': return pad(this.wy, 4) + pad(this.ww);\n case 'yyyy': return pad(this.yy, 4);\n case 'yy': return pad(this.yy % 100);\n case 'mon': return this.mon;\n case 'mmm': return this.mmm;\n case 'mm': return pad(this.mm);\n case 'dd': return pad(this.dd);\n case 'day': return this.day.toString();\n case 'dow': return this.dow.toString();\n case 'wkd': return this.wkd;\n case 'www': return this.www;\n case 'ww': return pad(this.ww);\n case 'hh': return pad(this.hh);\n case 'HH': return pad(this.hh > 12 ? this.hh % 12 : this.hh || 12);\n case 'mer': return this.hh >= 12 ? 'pm' : 'am';\n case 'MER': return this.hh >= 12 ? 'PM' : 'AM';\n case 'mi': return pad(this.mi);\n case 'ss': return pad(this.ss);\n case 'ms': return pad(this.ms, 3);\n case 'us': return pad(this.us, 3);\n case 'ns': return pad(this.ns, 3);\n case 'ff': return `${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`;\n case 'hhmiss': return `${pad(this.hh)}${pad(this.mi)}${pad(this.ss)}`;\n case 'ts': return this.ts.toString();\n case 'nano': return this.nano.toString();\n case 'tz': return this.tz;\n default: {\n return token.startsWith('term.')\n ? stringify(this.term[token.slice(5)])\n : `{${token}}`; // unknown format-code, return as-is\n }\n }\n });\n const isExplicitlyNumeric = ['{yyyy}{ww}', '{yyyy}{mm}', '{yyyy}{mm}{dd}', '{yyww}', '{wy}{ww}', '{wy}'].includes(template);\n return (isExplicitlyNumeric ? ifNumeric(result) : result);\n };\n #until(arg, until = {}, since = false) {\n let value, opts = {}, unit;\n switch (true) {\n case isString(arg) && Tempo.ELEMENT.includes(singular(arg)):\n unit = arg; // e.g. tempo.until('hours')\n ({ value, ...opts } = until);\n break;\n case isString(arg): // assume 'arg' is a dateTime string\n value = arg; // e.g. tempo.until('20-May-1957', {unit: 'years'})\n if (isObject(until))\n ({ unit, ...opts } = until);\n else\n unit = until; // assume the 'until' arg is a 'unit' string\n break;\n case isObject(arg) && isString(until): // assume 'until' is a Unit\n unit = until; // e.g. tempo.until({value:'20-May-1957}, 'years'})\n ({ value, ...opts } = arg);\n break;\n case isObject(arg) && isObject(until): // assume combination of Tempo.Options and Tempo.Until\n ({ value, unit, ...opts } = Object.assign({}, arg, until));\n break;\n case isString(until):\n unit = until;\n value = arg;\n break;\n case isObject(until):\n unit = until.unit;\n value = arg;\n break;\n default:\n value = arg; // assume 'arg' is a DateTime\n }\n const offset = new this.#Tempo(value, opts); // create the offset Tempo\n const diffZone = this.#zdt.timeZoneId !== offset.#zdt.timeZoneId;\n // Temporal restricts cross-timezone math to absolute units ('hours') to avoid DST ambiguity\n const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') });\n if (isDefined(unit))\n unit = `${singular(unit)}s`; // coerce to plural\n if (isUndefined(unit) || since) {\n const res = getAccessors(duration)\n .reduce((acc, dur) => Object.assign(acc, ifDefined({ [dur]: duration[dur] })), {});\n return Object.assign(res, { iso: duration.toString(), unit });\n }\n return duration.total({ relativeTo: this.#zdt, unit });\n }\n /** format the elapsed time between two Tempos (to nanosecond) */\n #since(arg, until = {}) {\n const dur = this.#until(arg, until, true); // get a Tempo.Duration object\n const date = [dur.years, dur.months, dur.days];\n const time = [dur.hours, dur.minutes, dur.seconds];\n const fraction = [dur.milliseconds, dur.microseconds, dur.nanoseconds]\n .map(Math.abs)\n .map(nbr => nbr.toString().padStart(3, '0'))\n .join('');\n const rtf = new Intl.RelativeTimeFormat(this.#local.config['locale'], { style: 'narrow' });\n switch (dur.unit) {\n case 'years':\n return rtf.format(date[0], 'years');\n case 'months':\n return rtf.format(date[1], 'months');\n case 'weeks':\n return rtf.format(date[1], 'weeks');\n case 'days':\n return rtf.format(date[2], 'days');\n case 'hours':\n return rtf.format(time[0], 'hours');\n case 'minutes':\n return rtf.format(time[1], 'minutes');\n case 'seconds':\n return rtf.format(time[2], 'seconds');\n case 'milliseconds':\n case 'microseconds':\n case 'nanoseconds':\n return `${fraction}`;\n default:\n return dur.iso;\n }\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Tempo = _classThis;\n})();\nexport { Tempo };\n// #endregion Namespace\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nTempo.init(); // initialize default global configuration\n// shortcut functions to common Tempo properties / methods\n/** check valid Tempo */ export const isTempo = (tempo) => isType(tempo, 'Tempo');\n/** current timestamp (ts) */ export const getStamp = ((tempo, options) => new Tempo(tempo, options).ts);\n/** create new Tempo */ export const getTempo = ((tempo, options) => new Tempo(tempo, options));\n/** format a Tempo */ export const fmtTempo = ((fmt, tempo, options) => new Tempo(tempo, options).format(fmt));\n//# sourceMappingURL=tempo.class.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport { Logify } from '#library/logify.class.js';\nimport { asArray } from '#library/coercion.library.js';\nimport { sprintf } from '#library/string.library.js';\nimport { ifDefined } from '#library/object.library.js';\nimport { secure } from '#library/utility.library.js';\nimport { cleanify } from '#library/serialize.library.js';\nimport { Immutable } from '#library/class.library.js';\nimport { isEmpty, isObject } from '#library/type.library.js';\n/**\n * Wrap a Promise's resolve/reject/finally methods for later fulfilment.\n * with useful methods for tracking the state of the Promise, chaining fulfilment, etc.\n ```\n new Pledge({tag: string, onResolve?: () => void, onReject?: () => void, onSettle?: () => void})\n new Pledge(tag?: string)\n ```\n */\nlet Pledge = (() => {\n var _Pledge_static;\n let _classDecorators = [Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Pledge = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Pledge\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Pledge = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n #pledge;\n #status = {};\n #dbg;\n static {\n _Pledge_static = { value: {} };\n }\n static STATE = secure({\n Pending: Symbol('pending'),\n Resolved: Symbol('resolved'),\n Rejected: Symbol('rejected')\n });\n /** initialize future Pledge instances */\n static init(arg) {\n if (isObject(arg)) {\n if (isEmpty(arg))\n __classPrivateFieldSet(Pledge, _classThis, {}, \"f\", _Pledge_static); // reset static values\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }), ifDefined({ onResolve: arg.onResolve, onReject: arg.onReject, onSettle: arg.onSettle, }));\n }\n else {\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg, }));\n }\n if (__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug)\n console.log('Pledge: ', __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static)); // debug\n return Pledge.status;\n }\n /** reset static defaults */\n static [Symbol.dispose]() { Pledge.init({}); }\n static get status() {\n return __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static);\n }\n /** use catch:boolean to determine whether to throw or return */\n #catch(...msg) {\n if (this.status.catch) {\n this.#dbg.warn(...msg); // catch, but warn {error}\n return;\n }\n this.#dbg.error(...msg); // assume {error}\n throw new Error(sprintf('pledge: ', ...msg));\n }\n constructor(arg) {\n this.#pledge = Promise.withResolvers();\n this.#status = { state: Pledge.STATE.Pending, ...__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static) };\n if (isObject(arg)) {\n this.#dbg = new Logify({ debug: arg.debug, catch: arg.catch });\n Object.assign(this.#status, ifDefined({ tag: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, debug: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug, catch: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).catch }), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }));\n const onResolve = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onResolve).concat(asArray(arg.onResolve));\n const onReject = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onReject).concat(asArray(arg.onReject));\n const onSettle = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onSettle).concat(asArray(arg.onSettle));\n if (onResolve.length)\n this.#pledge.promise.then(val => onResolve.forEach(cb => cb(val)));\n if (onReject.length)\n this.#pledge.promise.catch(err => onReject.forEach(cb => cb(err)));\n if (onSettle.length)\n this.#pledge.promise.finally(() => onSettle.forEach(cb => cb()));\n if (this.#status.catch)\n this.#pledge.promise.catch(err => this.#catch(this.#status, err));\n }\n else {\n this.#dbg = new Logify();\n Object.assign(this.#status, ifDefined({ tag: arg ?? __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, }));\n }\n this.#pledge.promise.catch(() => { }); // global catch-all to prevent unhandled rejections\n Object.freeze(this); // make this instance immutable\n }\n get [Symbol.toStringTag]() {\n return 'Pledge';\n }\n [Symbol.dispose]() {\n if (this.isPending)\n this.reject(new Error(`Pledge disposed`)); // discard pending Pledge (to notify wait-ers)\n }\n get status() {\n return cleanify(this.#status);\n }\n get promise() {\n return this.#pledge.promise;\n }\n get state() {\n return this.#status.state.description;\n }\n get isPending() {\n return this.#status.state === Pledge.STATE.Pending;\n }\n get isResolved() {\n return this.#status.state === Pledge.STATE.Resolved;\n }\n get isRejected() {\n return this.#status.state === Pledge.STATE.Rejected;\n }\n get isSettled() {\n return this.#status.state !== Pledge.STATE.Pending;\n }\n toString() {\n return JSON.stringify(this.status);\n }\n resolve(value) {\n if (this.isPending) {\n this.#status.settled = value;\n this.#status.state = Pledge.STATE.Resolved;\n this.#pledge.resolve(value); // resolve, then trigger any Pledge.onResolve, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n reject(error) {\n if (this.isPending) {\n this.#status.error = error;\n this.#status.state = Pledge.STATE.Rejected;\n this.#pledge.reject(error); // reject, then trigger any Pledge.onReject, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n then(fn) {\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Pledge = _classThis;\n})();\nexport { Pledge };\n//# sourceMappingURL=pledge.class.js.map"],"names":["isTempo","ranges","key","scope","description","define","qtr.key","qtr.scope","qtr.description","qtr.define","szn.key","szn.scope","szn.description","szn.define","zdc.key","zdc.scope","zdc.description","zdc.define","per.key","per.scope","per.description","per.define","enums.WEEKDAY","enums.WEEKDAYS","enums.MONTH","enums.MONTHS","enums.DURATION","enums.DURATIONS","enums.SEASON","enums.COMPASS","enums.ELEMENT","enums.LIMIT","enums.DISCOVERY","enums.PARSE","enums.FORMAT","enums.MUTATION","enums.OPTION","enums.ZONED_DATE_TIME"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC1B,IAAI,MAAM,OAAO,GAAG;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;AAC1B,IAAI,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAC9C;;ACjBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAmDO,SAAS,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE;AACzG,EAAE,SAAS,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,MAAM,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACxH,EAAE,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,KAAK,QAAQ,GAAG,KAAK,GAAG,OAAO;AAClG,EAAE,IAAI,MAAM,GAAG,CAAC,YAAY,IAAI,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;AACzF,EAAE,IAAI,UAAU,GAAG,YAAY,KAAK,MAAM,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC1G,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK;AACrB,EAAE,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,MAAM,IAAI,OAAO,GAAG,EAAE;AACtB,MAAM,KAAK,IAAI,CAAC,IAAI,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AAC9E,MAAM,KAAK,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7E,MAAM,OAAO,CAAC,cAAc,GAAG,UAAU,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,IAAI,SAAS,CAAC,wDAAwD,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnL,MAAM,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,UAAU,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;AACpI,MAAM,IAAI,IAAI,KAAK,UAAU,EAAE;AAC/B,UAAU,IAAI,MAAM,KAAK,MAAM,EAAE;AACjC,UAAU,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC;AACnG,UAAU,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC;AACxD,UAAU,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC;AACxD,UAAU,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9D,MAAM;AACN,WAAW,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE;AACnC,UAAU,IAAI,IAAI,KAAK,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD,eAAe,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AAClC,MAAM;AACN,EAAE;AACF,EAAE,IAAI,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;AACvE,EAAE,IAAI,GAAG,IAAI;AACb;AAEO,SAAS,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE;AAChE,EAAE,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;AACrC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChD,MAAM,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7F,EAAE;AACF,EAAE,OAAO,QAAQ,GAAG,KAAK,GAAG,MAAM;AAClC;AAMO,SAAS,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AACnD,EAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,EAAE;AAChG,EAAE,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;AACtH;AAkLO,SAAS,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AACjE,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC;AAC9F,EAAE,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,0EAA0E,CAAC;AACpL,EAAE,OAAO,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/F;;AAEO,SAAS,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AACxE,EAAE,IAAI,IAAI,KAAK,GAAG,EAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC;AACzE,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC;AAC9F,EAAE,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC;AACnL,EAAE,OAAO,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,KAAK;AAC3G;;AA8BuB,OAAO,eAAe,KAAK,UAAU,GAAG,eAAe,GAAG,UAAU,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;AACvH,EAAE,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC;AAC5B,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC;AAClF;;AC1UA;AACA,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3E;AACA;AACA;AACA;AACO,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,SAAS,KAAK;AAC9C,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC;AAC/B,IAAI,QAAQ,IAAI;AAChB,QAAQ,KAAK,IAAI,KAAK,QAAQ;AAC9B,YAAY,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG;AACxC,kBAAkB,WAAW;AAC7B,kBAAkB,GAAG,CAAC,WAAW,EAAE,IAAI,IAAI,QAAQ,CAAC;AACpD,YAAY,QAAQ;AACpB,iBAAiB,IAAI,CAAC,IAAI,IAAI,GAAG,YAAY,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI;AAC9D,mBAAmB,IAAI,EAAE;AACzB,QAAQ,KAAK,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC9F,YAAY,OAAO,OAAO;AAC1B,QAAQ;AACR,YAAY,OAAO,IAAI;AACvB;AACA,CAAC;AACD;AACO,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,SAAS,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;AAC9F;AACO,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACrE;AACO,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AACjI,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;AAC9C,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC5E,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC/C,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC;AAChE,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;AAChD,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;AAG/E,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;AAC7C,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACrJ,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC/C,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;AAC3C,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC/C,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3E,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC/C,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS;AAEtF,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;AAC3C,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC;AAC5E,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC;AACtE,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;AAE1C,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,eAAe,CAAC;AAEpE,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;AACzC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;AAGhD;AACO,MAAMA,SAAO,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;AAK7C,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,IAAI,KAAK;AACvD;AACO,MAAM,OAAO,GAAG,CAAC,GAAG,KACpB,SAAS,CAAC,GAAG;AACpB,QAAQ,QAAQ,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAC5D,QAAQ,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AAClD,QAAQ,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AAC9C,QAAQ,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;AAC1C,QAAQ,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;AACtC,QAAQ,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;;ACtEvC;AACO,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAqBrC,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE;AACnC,IAAI,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;AACvC,IAAI,QAAQ,IAAI;AAChB,QAAQ,KAAK,OAAO;AACpB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;AAC/B,gBAAgB,KAAK,CAAC,KAAK,EAAE,CAAC;AAC9B,gBAAgB;AAChB,YAAY;AACZ,YAAY;AACZ,iBAAiB,IAAI;AACrB,iBAAiB,OAAO,EAAE;AAC1B,iBAAiB,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,YAAY;AACZ,QAAQ,KAAK,QAAQ;AACrB,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;AAClD,iBAAiB,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACnE;AACA,IAAI,OAAO,KAAK,CAAC;AACjB;AASA;AACA;AACA;AACO,SAAS,OAAO,CAAC,IAAI,EAAE;AAC9B,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC;AAC/C;AACA;AACO,SAAS,SAAS,CAAC,IAAI,EAAE;AAChC,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,KAAK,CAAC;AACtD;AACA;AACO,SAAS,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,KAAK,EAAE;AAC9C,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;AACzC,QAAQ,OAAO,EAAE;AACjB,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK;AAC5B,QAAQ,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;AACxC,QAAQ,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG;AAClC,aAAa,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,UAAU;AAChF,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,GAAG;AACZ,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC;AAC3B;AACA;AACA,IAAI,MAAM,MAAM,GAAG,EAAE;AACrB,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,IAAI,KAAK,GAAG,CAAC;AACjB,IAAI,IAAI,KAAK,GAAG,IAAI;AACpB,IAAI,GAAG;AACP,QAAQ,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;AAC1C,QAAQ,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;AACjC,QAAQ,IAAI,GAAG,CAAC,MAAM;AACtB,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,QAAQ,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;AACxC,IAAI,CAAC,QAAQ,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,EAAE,KAAK,GAAG,KAAK;AACnE,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1D;AACA;AACO,SAAS,SAAS,CAAC,IAAI,EAAE;AAChC,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrD;AACA;AACO,MAAM,YAAY,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK;AAC1C,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;AACnC,CAAC;AAKD,MAAM,YAAY,GAAG,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,KAAK;AACzC,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,yBAAyB,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnG,IAAI,OAAO,UAAU,CAAC,SAAS;AAC/B,SAAS,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjE,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC;AAC/B,CAAC;;AC7ED;AACO,MAAM,OAAO,GAAG;AACvB,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,QAAQ,EAAE,QAAQ;AACtB,IACI,kBAAkB,EAAE,oBAAoB;AAC5C,CAAC;AACD;AACO,MAAM,UAAU,GAAG,MAAM;AAChC,IAAI,MAAM,MAAM,GAAG,UAAU;AAC7B,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;AACxC,QAAQ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE;AACzD,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC1C,QAAQ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;AAChD,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;AACjD,QAAQ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE;AAC/C,IAAI,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;AAC5C,CAAC;AACD;AACA;AACO,SAAS,MAAM,CAAC,GAAG,EAAE;AAC5B,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC;AACxB,QAAQ,SAAS,CAAC,GAAG,CAAC;AACtB,aAAa,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACjE,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9B;;ACnDA;AACO,SAAS,KAAK,CAAC,EAAE,EAAE;AAC1B,IAAI,OAAO,SAAS,OAAO,CAAC,GAAG,IAAI,EAAE;AACrC,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM;AACxC,cAAc,EAAE,CAAC,GAAG,IAAI;AACxB,cAAc,CAAC,GAAG,QAAQ,KAAK,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;AAC5D,IAAI,CAAC;AACL;AAkBA,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE;AAKxB;AACO,SAAS,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE;AACxC,IAAI,OAAO;AACX,QAAQ,UAAU,EAAE,KAAK;AACzB,QAAQ,YAAY,EAAE,KAAK;AAC3B,QAAQ,QAAQ,EAAE,KAAK;AACvB,QAAQ,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE;AAClC,YAAY,MAAM,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,YAAY,IAAI,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,YAAY,IAAI,CAAC,KAAK,EAAE;AACxB,gBAAgB,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AAC3C,gBAAgB,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AACnC,YAAY;AACZ,YAAY,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;AACzC,gBAAgB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAClD,gBAAgB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,YAAY;AACZ,YAAY,OAAO,KAAK,CAAC,GAAG,CAAC;AAC7B,QAAQ;AACR,KAAK;AACL;;ACjDA;AACA;AACY,MAAC,QAAQ,GAAG,IAAI,GAAG;AAC/B;AACA;AACA;AACO,SAAS,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;AACjC,IAAI,IAAI;AACR,QAAQ,OAAO,UAAU,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC;AACpD,IAAI;AACJ,IAAI,MAAM;AACV,QAAQ,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC7B,IAAI;AACJ;AACA;AACO,SAAS,QAAQ,CAAC,GAAG,EAAE;AAC9B,IAAI,IAAI;AACR,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,CAAC;AACrD,QAAQ,OAAO,EAAE,GAAG,GAAG,EAAE;AACzB,IAAI;AACJ;AACA;AACO,SAAS,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE;AACxC,IAAI,IAAI;AACR,QAAQ,OAAO,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;AAClD,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,CAAC;AACxD,QAAQ,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;AAC5C,QAAQ,OAAO,GAAG;AAClB,IAAI;AACJ;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1E,SAAS,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD;AACA,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACnF;AACA,SAAS,MAAM,CAAC,GAAG,EAAE;AACrB,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;AAC5B,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3B,QAAQ,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI;AACjC,YAAY,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI;AAClC,YAAY,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;AAC5C,YAAY,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;AAClD,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,GAAG;AACd;AACA;AACA,SAAS,MAAM,CAAC,GAAG,EAAE;AACrB,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;AACvB,QAAQ,IAAI;AACZ,YAAY,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AAClC,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB;AACA,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,GAAG,CAAC;AACf;AACA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE;AAC3B,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AACrF;AACA;AACA,SAAS,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;AAC7B,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AAClC;AACA;AACA,SAAS,UAAU,CAAC,GAAG,EAAE;AACzB,IAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;AAClC,UAAU,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AACpE,UAAU,GAAG,CAAC;AACd;AACA,MAAM,MAAM,GAAG,qBAAqB,CAAC;AACrC;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;AACzB,IAAI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;AAC9F,IAAI,QAAQ,IAAI;AAChB,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAQ,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAQ,KAAK,SAAS,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC;AACnD,YAAY,OAAO,KAAK;AACxB,QAAQ,KAAK,SAAS,CAAC,MAAM,CAAC;AAC9B,YAAY,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,QAAQ,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,QAAQ;AACR,YAAY,OAAO,MAAM,CAAC,IAAI,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,SAAS,CAAC,GAAG,EAAE;AAC/B,IAAI,OAAO,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,EAAE;AACxC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3B,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,IAAI,QAAQ,GAAG,CAAC,IAAI;AACpB,QAAQ,KAAK,QAAQ;AACrB,YAAY,IAAI,CAAC,OAAO,EAAE;AAC1B,gBAAgB,OAAO,GAAG,GAAG,CAAC,KAAK,KAAK,MAAM;AAC9C,uBAAuB,GAAG,CAAC,KAAK,KAAK,OAAO;AAC5C,uBAAuB,GAAG,CAAC,KAAK,KAAK;AACrC,uBAAuB,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,KAAK;AACrE,YAAY;AACZ,YAAY,OAAO;AACnB,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnD,kBAAkB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,QAAQ,KAAK,SAAS;AACtB,QAAQ,KAAK,MAAM;AACnB,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7C,QAAQ,KAAK,MAAM;AACnB,QAAQ,KAAK,WAAW;AACxB,YAAY,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,QAAQ,KAAK,QAAQ;AACrB,YAAY,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK;AAC5C,iBAAiB,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,YAAY,CAAC,GAAG,CAAC;AACtD,iBAAiB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5E,iBAAiB,IAAI,CAAC,GAAG,CAAC;AAC1B,YAAY,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7B,QAAQ,KAAK,OAAO;AACpB,YAAY,MAAM,GAAG,GAAG,GAAG,CAAC;AAC5B,iBAAiB,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC;AAChD,iBAAiB,GAAG,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC;AAC1C,iBAAiB,IAAI,CAAC,GAAG,CAAC;AAC1B,YAAY,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7B,QAAQ,KAAK,KAAK;AAClB,YAAY,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE;AACtD,iBAAiB,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,YAAY,CAAC,GAAG,CAAC;AACtD,iBAAiB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7E,iBAAiB,IAAI,CAAC,GAAG,CAAC;AAC1B,YAAY,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAClC,QAAQ,KAAK,KAAK;AAClB,YAAY,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE;AACrD,iBAAiB,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC;AAChD,iBAAiB,GAAG,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC;AAC1C,iBAAiB,IAAI,CAAC,GAAG,CAAC;AAC1B,YAAY,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAClC,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7C,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACvF,QAAQ,KAAK,OAAO;AACpB,QAAQ;AACR,YAAY,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK;AACnC,YAAY,QAAQ,IAAI;AACxB,gBAAgB,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;AACzC,oBAAoB,OAAO,SAAS;AACpC,gBAAgB,KAAK,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;AAC7C,oBAAoB,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AACzD,gBAAgB,KAAK,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC/C,oBAAoB,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;AAChD,oBAAoB,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AAChD,0BAA0B;AAC1B,0BAA0B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC9C,gBAAgB,KAAK,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;AAC9C,oBAAoB,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC/D,gBAAgB;AAChB,oBAAoB,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC/D;AACA;AACA;AACA;AACO,SAAS,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE;AACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AACtB,QAAQ,OAAO,GAAG,CAAC;AACnB,IAAI,IAAI,KAAK;AACb,IAAI,IAAI;AACR,QAAQ,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACzC,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtD,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACxE,YAAY,OAAO,GAAG,CAAC;AACvB,QAAQ;AACR;AACA,YAAY,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACnD,IAAI;AACJ,IAAI,QAAQ,IAAI;AAChB,QAAQ,KAAK,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtD,QAAQ,KAAK,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrD,YAAY,OAAO,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC7C,QAAQ;AACR,YAAY,OAAO,KAAK;AACxB;AACA;AACA;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE;AACjC,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;AACvB,QAAQ,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG;AACrC,aAAa,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC;AAClI,IAAI;AACJ,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,QAAQ,OAAO,SAAS,CAAC,GAAG;AAC5B,aAAa,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AACzD,IAAI;AACJ,IAAI,OAAO,GAAG;AACd;AACA;AACA,SAAS,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE;AACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;AACrD,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;AACtC,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpC,IAAI,QAAQ,IAAI;AAChB,QAAQ,KAAK,QAAQ;AACrB,QAAQ,KAAK,SAAS;AACtB,QAAQ,KAAK,QAAQ;AACrB,QAAQ,KAAK,OAAO;AACpB,YAAY,OAAO,KAAK,CAAC;AACzB,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,QAAQ,KAAK,MAAM;AACnB,YAAY,OAAO,IAAI;AACvB,QAAQ,KAAK,WAAW;AACxB,QAAQ,KAAK,OAAO;AACpB,QAAQ,KAAK,MAAM;AACnB,YAAY,OAAO,QAAQ,IAAI,CAAC;AAChC,QAAQ,KAAK,MAAM;AACnB,YAAY,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC;AAClC,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;AACxD,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,QAAQ,CAAC,KAAK,CAAC;AAClC,QAAQ,KAAK,KAAK;AAClB,YAAY,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC;AACjC,QAAQ,KAAK,KAAK;AAClB,YAAY,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC;AACjC,QAAQ;AACR,YAAY,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAY,IAAI,CAAC,GAAG,EAAE;AACtB,gBAAgB,OAAO,CAAC,IAAI,CAAC,CAAC,yCAAyC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACjF,gBAAgB,OAAO,IAAI,CAAC;AAC5B,YAAY;AACZ,YAAY,OAAO,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD;AACA;;ACvQA;AACA;AACA;AACA;AACO,SAAS,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE;AACjE,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACvB,IAAI,QAAQ,IAAI;AAChB,QAAQ,KAAK,OAAO;AACpB,YAAY,MAAM,OAAO,GAAG;AAC5B,gBAAgB,CAAC,IAAI,GAAG,cAAc,KAAK,CAAC;AAC5C,oBAAoB,WAAW,CAAC,GAAG,IAAI,EAAE;AACzC,wBAAwB,KAAK,CAAC,GAAG,IAAI,CAAC;AACtC,wBAAwB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,oBAAoB;AACpB;AACA,aAAa,CAAC,IAAI,CAAC;AACnB,YAAY,cAAc,CAAC,MAAM;AACjC,gBAAgB,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK;AACzC,oBAAoB,UAAU,CAAC,MAAM,CAAC,yBAAyB,CAAC,GAAG,CAAC;AACpE,yBAAyB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,aAAa,CAAC;AACnE,yBAAyB,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,KAAK;AACzE,wBAAwB,IAAI,YAAY,EAAE;AAC1C,4BAA4B,MAAM,MAAM,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE;AAClE,4BAA4B,IAAI,QAAQ;AACxC,gCAAgC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxD,4BAA4B,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;AACpE,wBAAwB;AACxB,oBAAoB,CAAC,CAAC;AACtB,gBAAgB,CAAC;AACjB,gBAAgB,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/B,gBAAgB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACzC,gBAAgB,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,gBAAgB,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC3C,YAAY,CAAC,CAAC;AACd,YAAY,OAAO,OAAO;AAC1B,QAAQ;AACR,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,sCAAsC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACtF;AACA;AACA;AACO,SAAS,YAAY,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE;AACpE,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,IAAI,QAAQ,IAAI;AAChB,QAAQ,KAAK,OAAO;AACpB,YAAY,cAAc,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAClE,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,yCAAyC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACzF;AACA;;AChDA,MAAM,MAAM,GAAG;AACf,IAAI,GAAG,EAAE,KAAK;AACd,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,KAAK,EAAE,OAAO;AAClB,CAAC;AACD;AACA;AACA;AACA,IAAI,MAAM,GAAG,CAAC,MAAM;AACpB,IAAI,IAAI,gBAAgB,GAAG,CAAC,SAAS,CAAC;AACtC,IAAI,IAAI,gBAAgB;AACxB,IAAI,IAAI,uBAAuB,GAAG,EAAE;AACpC,IAAI,IAAI,UAAU;AAClB,KAAiB,MAAM;AACvB,QAAQ,SAAS,UAAU,GAAG,IAAI,CAAC;AACnC,QAAQ;AACR,YAAY,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM;AAC5G,YAAY,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC;AACxL,YAAqB,UAAU,GAAG,gBAAgB,CAAC,KAAK;AACxD,YAAY,IAAI,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACzJ,YAAY,iBAAiB,CAAC,UAAU,EAAE,uBAAuB,CAAC;AAClE;AACA,QAAQ,KAAK;AACb,QAAQ,KAAK,GAAG,EAAE;AAClB,QAAQ,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE;AAC7B,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;AAChC,gBAAgB,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC;AACnD,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ,KAAK,CAAC,GAAG,GAAG,EAAE;AACtB,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClC,gBAAgB,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AAClC,gBAAgB,OAAO;AACvB,YAAY;AACZ,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnH,QAAQ;AACR,2BAA2B,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;AAC1E,4BAA4B,IAAI,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC;AAC7E,4BAA4B,IAAI,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC;AAC7E,6BAA6B,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC;AAChF,6BAA6B,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC;AAChF,QAAQ,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE;AACrC,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;AACpC,YAAY,QAAQ,GAAG,CAAC,IAAI;AAC5B,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AAC1C,oBAAoB;AACpB;AACA,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC;AAClD,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;AACnF;AACA,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;AACnD,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;AACnD,QAAQ;AACR;AACA,IAAI,OAAgB,UAAU;AAC9B,CAAC,GAAG;;ACjEJ;AACO,SAAS,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;AACzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;AACrB,QAAQ,OAAO,GAAG,CAAC;AACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACvC,QAAQ,OAAO,GAAG;AAClB,IAAI,OAAO;AACX,SAAS,QAAQ;AACjB,SAAS,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC;AAC3C,SAAS,KAAK,CAAC,GAAG;AAClB,SAAS,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACzC,SAAS,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI;AAClE;AA4CA;AACO,SAAS,SAAS,CAAC,GAAG,EAAE;AAC/B,IAAI,OAAO,UAAU,CAAC,GAAG;AACzB,SAAS,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK;AACrC,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC;AAC1B,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;AAC1B,QAAQ,OAAO,GAAG;AAClB,IAAI,CAAC,EAAE,EAAE,CAAC;AACV;AAeO,SAAS,UAAU,CAAC,GAAG,EAAE;AAChC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC;AACtB,QAAQ,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG;AAC5C,IAAI,OAAO,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG;AACjD;AACA;AACA,UAAU,CAAC,YAAY,GAAG,UAAU,EAAE;AACtC;AACA,UAAU,CAAC,YAAY,GAAG,UAAU,EAAE;AACtC;AACA,UAAU,CAAC,YAAY,GAAG,UAAU,EAAE;AACtC;AACA,UAAU,CAAC,YAAY,GAAG,UAAU,EAAE;;AC3F/B,SAAS,OAAO,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE;AACxC,IAAI,QAAQ,IAAI;AAChB,QAAQ,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAQ,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9C,YAAY,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;AAC1C,gBAAgB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,GAAG;AACzD,sBAAsB,GAAG;AACzB,sBAAsB,KAAK,CAAC,IAAI,CAAC,CAAC;AAClC,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,YAAY,OAAO,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC;AAChC;AACA;AACA;AACO,SAAS,QAAQ,CAAC,GAAG,EAAE;AAC9B,IAAI,OAAO,SAAS,CAAC,GAAG;AACxB,UAAU;AACV,UAAU,SAAS,CAAC,GAAG;AACvB,cAAc,GAAG,CAAC,QAAQ,EAAE,GAAG;AAC/B,cAAc,SAAS,CAAC,GAAG,CAAC;AAC5B;AACA;AACO,SAAS,QAAQ,CAAC,GAAG,EAAE;AAC9B,IAAI,OAAO,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;AAC/C;AACA;AACO,SAAS,SAAS,CAAC,GAAG,EAAE;AAC/B,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3B,IAAI,QAAQ,GAAG,CAAC,IAAI;AACpB,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACjD,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5C,kBAAkB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChD,kBAAkB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,QAAQ;AACR,YAAY,OAAO,GAAG;AACtB;AACA;AACA;AACO,SAAS,SAAS,CAAC,GAAG,EAAE;AAC/B,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3B,IAAI,QAAQ,GAAG,CAAC,IAAI;AACpB,QAAQ,KAAK,QAAQ;AACrB,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,IAAI;AACvB,QAAQ,KAAK,QAAQ;AACrB,YAAY,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK;AAC1C,kBAAkB,IAAI;AACtB,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;AACzD,QAAQ;AACR,YAAY,OAAO,KAAK;AACxB;AACA;AACA;AACO,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,KAAK,KAAK;AACrD,IAAI,QAAQ,IAAI;AAChB,QAAQ,KAAK,SAAS,CAAC,GAAG,CAAC;AAC3B,YAAY,OAAO,MAAM,CAAC,GAAG,CAAC;AAC9B,QAAQ,KAAK,QAAQ,CAAC,GAAG,CAAC;AAC1B,YAAY,OAAO,GAAG;AACtB,QAAQ,KAAK,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AAC9E,YAAY,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACjC,QAAQ;AACR,YAAY,OAAO,GAAG,CAAC;AACvB;AACA,CAAC;;ACnED,MAAM,OAAO,GAAG,UAAU,EAAE;AAC5B,IAAI,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;AACvC,MAAM,OAAO,CAAC,MAAM,EAAE,YAAY;AAClC,MAAM,SAAS;AAMR,SAAS,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE;AACtC,IAAI,IAAI,KAAK;AACb,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC;AACxB,QAAQ,OAAO,IAAI,IAAI,EAAE;AACzB,IAAI,QAAQ,OAAO,CAAC,IAAI;AACxB,QAAQ,KAAK,OAAO,CAAC,OAAO;AAC5B,YAAY,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AACxC,YAAY;AACZ,QAAQ,KAAK,OAAO,CAAC,MAAM;AAC3B,YAAY,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACnD,YAAY;AACZ,QAAQ,KAAK,OAAO,CAAC,gBAAgB;AACrC,YAAY,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;AAC1F,YAAY;AACZ,QAAQ;AACR,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,qCAAqC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACnF;AACA,IAAI,OAAO,QAAQ,CAAC,KAAK;AACzB,UAAU,SAAS,CAAC,KAAK,CAAC;AAC1B,UAAU,IAAI;AACd;AACA;AACO,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS;AAC7D,IAAI,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC;AAChC,IAAI,QAAQ,OAAO,CAAC,IAAI;AACxB,QAAQ,KAAK,OAAO,CAAC,OAAO;AAC5B,YAAY;AACZ,kBAAkB,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK;AAC5C,kBAAkB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;AACzC,YAAY;AACZ,QAAQ,KAAK,OAAO,CAAC,MAAM;AAC3B,YAAY;AACZ,mBAAmB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;AAC1D,mBAAmB,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1D,YAAY;AACZ,QAAQ,KAAK,OAAO,CAAC,gBAAgB;AACrC,YAAY;AACZ,kBAAkB,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK;AAC9F,kBAAkB,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC;AAC3F,YAAY;AACZ,QAAQ;AACR,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,qCAAqC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACnF;AACA;;ACrDA;AACA,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC;AACzD;AACO,SAAS,QAAQ,CAAC,MAAM,EAAE;AACjC,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM;AACzC,IAAI,IAAI,UAAU;AAClB,IAAI,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;AAC7B,QAAQ,YAAY,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AACpD,QAAQ,iBAAiB,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC9D,QAAQ,wBAAwB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC;AACxF,QAAQ,cAAc,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;AACzD,QAAQ,cAAc,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC;AACpE,QAAQ,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3C,QAAQ,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AAC9C,QAAQ,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACxD,QAAQ,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,KAAK;AACnC,YAAY,IAAI,GAAG,KAAK,OAAO;AAC/B,gBAAgB,OAAO,GAAG,CAAC;AAC3B,YAAY,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,EAAE;AACtD,gBAAgB,MAAM,GAAG,GAAG,MAAM,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC;AACrE,gBAAgB,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAChD,oBAAoB,OAAO,GAAG,CAAC,KAAK;AACpC,gBAAgB,IAAI,CAAC,UAAU,EAAE;AACjC,oBAAoB,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACvD,oBAAoB,UAAU,GAAG,MAAM,MAAM,CAAC;AAC9C,gBAAgB;AAChB,gBAAgB,OAAO,UAAU,CAAC;AAClC,YAAY;AACZ,YAAY,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC;AACvD,YAAY,OAAO,CAAC,OAAO,GAAG,KAAK,UAAU;AAC7C,kBAAkB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/B,kBAAkB,GAAG,CAAC;AACtB,QAAQ,CAAC;AACT,KAAK,CAAC;AACN;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE;AAClC,IAAI,OAAO;AACX,SAAS,QAAQ,EAAE;AACnB,SAAS,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AACzB,SAAS,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AAC5B,SAAS,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;AACtC,SAAS,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;AAChC,SAAS,IAAI,EAAE,CAAC;AAChB;AACA;AACO,SAAS,YAAY,CAAC,GAAG,GAAG,EAAE;AACrC,IAAI,OAAO;AACX,SAAS,IAAI,EAAE;AACf,SAAS,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACnH,SAAS,IAAI,CAAC,GAAG,CAAC;AAClB;AAmBO,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;AACrC,IAAI,MAAM,MAAM,GAAG,aAAa,CAAC;AACjC,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxB,QAAQ,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,QAAQ,IAAI,GAAG,EAAE,CAAC;AAClB,IAAI;AACJ,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC;AAChB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACnD,SAAS,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK;AAC5B,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AACjC,YAAY,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5F,IAAI,CAAC,CAAC;AACN;AACA,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1F;AAQA;AACO,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;AAU3E;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;;AChFrI,yCAAyC,MAAM,GAAG,GAAG,SAAS;AAC9D;AACA,SAAS,KAAK,CAAC,GAAG,EAAE;AACpB,IAAI,OAAO;AACX,QAAQ,UAAU,EAAE,KAAK;AACzB,QAAQ,YAAY,EAAE,KAAK;AAC3B,QAAQ,QAAQ,EAAE,KAAK;AACvB,QAAQ,KAAK,EAAE;AACf,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AACxC,IAAI,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAChF,IAAI,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3F,IAAI,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClG,IAAI,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,IAAI,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9I,IAAI,QAAQ,EAAE,aAAa,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,IAAI,GAAG,EAAE,KAAK,CAAC,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,IAAI,QAAQ,EAAE,KAAK,CAAC,UAAU,MAAM,EAAE,EAAE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,IAAI,KAAK,EAAE,KAAK,CAAC,UAAU,MAAM,EAAE,EAAE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,IAAI,MAAM,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,IAAI,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9H,IAAI,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5M,IAAI,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7Q,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvF,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC;AACpC,CAAC,CAAC,CAAC;AACI,SAAS,OAAO,CAAC,IAAI,EAAE;AAC9B,IAAI,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI;AAC9B,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;AAC5B,IAAI,IAAI,KAAK,GAAG,EAAE;AAClB,IAAI,QAAQ,GAAG,CAAC,IAAI;AACpB,QAAQ,KAAK,SAAS;AACtB,QAAQ,KAAK,QAAQ;AACrB,YAAY,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;AAC3C,YAAY;AACZ,QAAQ,KAAK,OAAO;AACpB,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK;AAC9C,gBAAgB,IAAI,QAAQ,CAAC,GAAG,CAAC;AACjC,oBAAoB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;AAC9E,gBAAgB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;AACtD,YAAY,CAAC,CAAC;AACd,YAAY;AACZ,QAAQ;AACR,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,gCAAgC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1E;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAChF,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC;AAC3B;AACA;AACG,IAAC,OAAO,GAAG,CAAC,MAAM;AACrB,IAAI,IAAI,gBAAgB,GAAG,CAAC,YAAY,CAAC;AACzC,IAAI,IAAI,gBAAgB;AACxB,IAAI,IAAI,uBAAuB,GAAG,EAAE;AACpC,IAAI,IAAI,UAAU;AAClB,KAAkB,MAAM;AACxB,QAAQ,SAAS,UAAU,GAAG,IAAI,CAAC;AACnC,QAAQ;AACR,YAAY,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM;AAC5G,YAAY,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC;AACxL,YAAsB,UAAU,GAAG,gBAAgB,CAAC,KAAK;AACzD,YAAY,IAAI,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACzJ,YAAY,iBAAiB,CAAC,UAAU,EAAE,uBAAuB,CAAC;AAClE;AACA,QAAQ,WAAW,CAAC,IAAI,EAAE;AAC1B,YAAY,OAAO,OAAO,CAAC,IAAI,CAAC;AAChC,QAAQ;AACR;AACA,IAAI,OAAiB,UAAU;AAC/B,CAAC;;AC9ED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACjF,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AACpH,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAClH,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC3J,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAClG,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9F;AACO,MAAM,QAAQ,GAAG,OAAO,CAAC;AAChC,8CAA8C,IAAI,EAAE,UAAU;AAC9D,+CAA+C,KAAK,EAAE,SAAS;AAC/D,uCAAuC,IAAI,EAAE,OAAO;AACpD,sCAAsC,GAAG,EAAE,MAAM;AACjD,wCAAwC,IAAI,EAAE,KAAK;AACnD,yCAAyC,MAAM,EAAE,EAAE;AACnD,sBAAsB,MAAM,EAAE,CAAC;AAC/B,8CAA8C,WAAW,EAAE,IAAI;AAC/D,8CAA8C,WAAW,EAAE,QAAQ;AACnE,6CAA6C,UAAU,EAAE,YAAY;AACrE,CAAC,CAAC;AACF;AACO,MAAM,SAAS,GAAG,OAAO,CAAC;AACjC,mDAAmD,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,KAAK;AAC/E,oDAAoD,MAAM,EAAE,QAAQ,CAAC,KAAK,GAAG,KAAK;AAClF,4CAA4C,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,KAAK;AACxE,2CAA2C,IAAI,EAAE,QAAQ,CAAC,GAAG,GAAG,KAAK;AACrE,6CAA6C,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,KAAK;AACzE,8CAA8C,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,KAAK;AAC9E,8CAA8C,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,KAAK;AAC9E,2BAA2B,YAAY,EAAE,QAAQ,CAAC,WAAW,GAAG,KAAK;AACrE,mDAAmD,YAAY,EAAE,QAAQ,CAAC,WAAW,GAAG,KAAK;AAC7F,kDAAkD,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACnH,CAAC,CAAC;AACF;AACO,MAAM,MAAM,GAAG,OAAO,CAAC;AAC9B,4CAA4C,OAAO,EAAE,0BAA0B;AAC/E,0CAA0C,QAAQ,EAAE,0BAA0B;AAC9E,0CAA0C,QAAQ,EAAE,yCAAyC;AAC7F,+CAA+C,SAAS,EAAE,8CAA8C;AACxG,6CAA6C,QAAQ,EAAE,YAAY;AACnE,2BAA2B,OAAO,EAAE,mBAAmB;AACvD,6BAA6B,OAAO,EAAE,kCAAkC;AACxE,oCAAoC,QAAQ,EAAE,8BAA8B;AAC5E,8CAA8C,QAAQ,EAAE,iCAAiC;AACzF,yCAAyC,QAAQ,EAAE,UAAU;AAC7D,0CAA0C,SAAS,EAAE,YAAY;AACjE,yCAAyC,YAAY,EAAE,gBAAgB;AACvE,6BAA6B,IAAI,EAAE,kBAAkB;AACrD,6BAA6B,IAAI,EAAE,gBAAgB;AACnD,CAAC,CAAC;AACK,MAAM,KAAK,GAAG,MAAM,CAAC;AAC5B,0CAA0C,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,gBAAgB;AACjI,0CAA0C,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,gBAAgB;AACpH,CAAC,CAAC;AACK,MAAM,OAAO,GAAG,OAAO,CAAC;AAC/B,IAAI,EAAE,EAAE,MAAM;AACd,IAAI,EAAE,EAAE,OAAO;AACf,IAAI,EAAE,EAAE,MAAM;AACd,IAAI,EAAE,EAAE,KAAK;AACb,IAAI,EAAE,EAAE,MAAM;AACd,IAAI,EAAE,EAAE,QAAQ;AAChB,IAAI,EAAE,EAAE,QAAQ;AAChB,IAAI,EAAE,EAAE,aAAa;AACrB,IAAI,EAAE,EAAE,aAAa;AACrB,IAAI,EAAE,EAAE,YAAY;AACpB,CAAC,CAAC;AACK,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACtH,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAClI,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACrO,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAC1J,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;AC/E9E,MAAM,MAAM,GAAG;AACf,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAClB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AACnB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACjB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAClB,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AACpB,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AACpB,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;AACzB,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;AACzB,IAAI,CAAC,YAAY,EAAE,IAAI;AACvB,CAAC;AACD;AACA;AACA;AACO,SAAS,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE;AAC1D,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI;AAC3B,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY;AAC9G,SAAS,UAAU,EAAE;AACrB,IAAI,MAAM,KAAK,GAAG;AAClB,SAAS,IAAI,CAAC,KAAK,IAAI;AACvB,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE;AAC3C,YAAY,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;AACnC,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;AAChC,gBAAgB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACxC,gBAAgB,IAAI,IAAI,GAAG,GAAG;AAC9B,oBAAoB,OAAO,IAAI;AAC/B,gBAAgB,IAAI,IAAI,GAAG,GAAG;AAC9B,oBAAoB,OAAO,KAAK;AAChC,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI,CAAC;AACL,WAAW,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxB,IAAI,OAAO;AACX,UAAU,KAAK,EAAE;AACjB,UAAU,KAAK;AACf;;AClCA;AACA,MAAMC,QAAM,GAAG;AACf,IAAI;AACJ,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AACzE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AACzE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AACzE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AAC1E,KAAK,EAAE;AACP,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AACzE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AAC1E,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AACzE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AACzE;AACA,CAAC;AACM,MAAMC,KAAG,GAAG,KAAK;AACjB,MAAMC,OAAK,GAAG,SAAS;AACvB,MAAMC,aAAW,GAAG,gBAAgB;AAC3C;AACO,SAASC,QAAM,CAAC,OAAO,EAAE;AAChC,IAAI,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI;AAC3C,IAAI,MAAM,KAAK,GAAG,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;AAC3C,IAAI,MAAM,IAAI,GAAG,QAAQ,CAACJ,QAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC1C,IAAI,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7C;;ACxBA;AACA,MAAMA,QAAM,GAAG;AACf,IAAI;AACJ,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AACrF,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AAClF,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AACnF,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AACzF,KAAK,EAAE;AACP,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AACpF,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AAClF,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AAClF,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;AACvF,KAAK,EAAE;AACP,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,8BAA8B,EAAE;AACpG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE;AAClG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,oCAAoC,EAAE;AACxG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,yCAAyC,EAAE;AACnH;AACA,CAAC;AACM,MAAMC,KAAG,GAAG,KAAK;AACjB,MAAMC,OAAK,GAAG,QAAQ;AACtB,MAAMC,aAAW,GAAG,sBAAsB;AACjD;AACO,SAASC,QAAM,CAAC,OAAO,EAAE;AAChC,IAAI,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI;AACvC,IAAI,MAAM,KAAK,GAAG,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;AAC3C,IAAI,MAAM,IAAI,GAAG,QAAQ,CAACJ,QAAM,CAAC,CAAC,KAAK,CAAC,CAAC;AACzC,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,QAAQ,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,EAAEA,QAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACxD,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9C,IAAI;AACJ,IAAI,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;AAC5C;;ACjCA;AACA,MAAMA,QAAM,GAAG;AACf,IAAI;AACJ,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC/F,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;AAC/F,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE;AACxF,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;AAC5F,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;AAC/F,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;AAC3F,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;AACxF,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;AAChG,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;AAC9F,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE;AAC1G,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;AACxG,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;AAClG,KAAK,EAAE;AACP,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE;AACnD,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE;AACjD,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,wBAAwB,EAAE;AAC1D,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE;AACrD,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,uBAAuB,EAAE;AAC1D,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE;AACnD,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,wBAAwB,EAAE;AAC1D,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE;AACnD,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE;AACnD,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,wBAAwB,EAAE;AAC5D,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE;AAC/C,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE;AACzD,KAAK,EAAE;AACP,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE;AACvB,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE;AACvB,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE;AACxB,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE;AACxB,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE;AACxB;AACA,CAAC;AACM,MAAMC,KAAG,GAAG,KAAK;AACjB,MAAMC,OAAK,GAAG,QAAQ;AACtB,MAAMC,aAAW,GAAG,0BAA0B;AACrD;AACO,SAASC,QAAM,CAAC,OAAO,EAAE;AAChC,IAAI,MAAM,IAAI,GAAG,QAAQ,CAACJ,QAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,QAAQ,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9C,IAAI;AACJ,IAAI,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;AAC5C;AACA;AACA,SAAS,gBAAgB,CAAC,IAAI,EAAE;AAChC,IAAI,MAAM,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;AACxC,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3D,IAAI,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;AACpD,IAAI,OAAO;AACX,QAAQ,MAAM,EAAEA,QAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG;AAC1C,QAAQ,MAAM,EAAEA,QAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM;AAC7C,QAAQ,OAAO,EAAEA,QAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG;AAC5C,QAAQ,OAAO,EAAE;AACjB,KAAK;AACL;;AC5DA;AACA,MAAM,MAAM,GAAG;AACf,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE;AAChC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;AAC7B,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE;AAC/B,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE;AACnC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;AAC/B,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;AAC9C,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;AAC9B,CAAC;AACM,MAAM,GAAG,GAAG,KAAK;AACjB,MAAM,KAAK,GAAG,QAAQ;AACtB,MAAM,WAAW,GAAG,mBAAmB;AAC9C;AACO,SAAS,MAAM,CAAC,OAAO,EAAE;AAChC,IAAI,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;AAC9C;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA,oBAAe;AACf,IAAI,EAAE,GAAG,EAAEK,KAAO,EAAE,KAAK,EAAEC,OAAS,EAAE,WAAW,EAAEC,aAAe,EAAE,MAAM,EAAEC,QAAU,EAAE;AACxF,IAAI,EAAE,GAAG,EAAEC,KAAO,EAAE,KAAK,EAAEC,OAAS,EAAE,WAAW,EAAEC,aAAe,EAAE,MAAM,EAAEC,QAAU,EAAE;AACxF,IAAI,EAAE,GAAG,EAAEC,KAAO,EAAE,KAAK,EAAEC,OAAS,EAAE,WAAW,EAAEC,aAAe,EAAE,MAAM,EAAEC,QAAU,EAAE;AACxF,IAAI,EAAE,GAAG,EAAEC,GAAO,EAAE,KAAK,EAAEC,KAAS,EAAE,WAAW,EAAEC,WAAe,EAAE,MAAM,EAAEC,MAAU,EAAE;AACxF,CAAC;;ACdD;AACA;AACA;AACO,MAAM,KAAK,GAAG;AACrB,8DAA8D,MAAM,EAAE,wBAAwB;AAC9F,2DAA2D,QAAQ,EAAE,sCAAsC;AAC3G,iBAAiB,KAAK,EAAE,kBAAkB;AAC1C,kBAAkB,MAAM,EAAE,kBAAkB;AAC5C,0BAA0B,QAAQ,EAAE,YAAY;AAChD,gBAAgB,IAAI,EAAE,8BAA8B;AACpD,gBAAgB,IAAI,EAAE,iCAAiC;AACvD,gDAAgD,MAAM,EAAE,oBAAoB;AAC5E,0CAA0C,SAAS,EAAE,aAAa;AAClE,uCAAuC,QAAQ,EAAE,qCAAqC;AACtF,4CAA4C,KAAK,EAAE,WAAW;AAC9D,oDAAoD,MAAM,EAAE,QAAQ;AACpE,iCAAiC,MAAM,EAAE,MAAM;AAC/C,uBAAuB,GAAG,EAAE,KAAK;AACjC,CAAC;AACD;AACO,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;AAClC;AACA,gBAAgB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;AAChC,iBAAiB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;AACjC,eAAe,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;AAC/B,gBAAgB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;AAChC,kBAAkB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;AAClC,kBAAkB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;AAClC,oBAAoB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;AACpC,oBAAoB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;AACtC,8BAA8B,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;AAChD,2BAA2B,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;AAC7C,uBAAuB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;AACzC,qBAAqB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;AACvC,qBAAqB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;AACvC,oBAAoB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;AACtC,0BAA0B,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;AAC5C,uBAAuB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;AACzC,wBAAwB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;AAC1C,4BAA4B,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;AAC9C;AACA,gBAAgB,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;AAClC,gBAAgB,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;AAClC,yBAAyB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;AAChD,0BAA0B,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC;AACrD,0BAA0B,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC;AACrD,0BAA0B,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC;AACrD,+BAA+B,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC;AACpD,mBAAmB,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;AACzC,qDAAqD,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC;AAClF,sCAAsC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;AAC7D,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AACpC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,4BAA4B;AAC5C,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,wKAAwK;AACxL,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,2DAA2D;AAC3E,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,0BAA0B;AAC1C,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,uBAAuB;AACvC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,uBAAuB;AACvC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,uBAAuB;AACvC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,oBAAoB;AACrC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,4BAA4B;AAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,qGAAqG;AACtH,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,kGAAkG;AACnH,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,gBAAgB;AACjC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC1E,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACzE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC5D,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,kEAAkE;AACnF,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,8CAA8C;AAC/D,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AACnC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,6CAA6C;AAC7D,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,mCAAmC;AACnD,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,2CAA2C;AAC5D,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,uDAAuD;AACxE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,uDAAuD;AACxE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,uDAAuD;AACxE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,yBAAyB;AAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,kBAAkB;AACnC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,6BAA6B;AAC9C,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;AAClC,IAAI,kBAAkB,EAAE,QAAQ;AAChC,IAAI,KAAK,EAAE,QAAQ;AACnB,IAAI,qBAAqB,EAAE,QAAQ;AACnC,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,gBAAgB,EAAE,QAAQ;AAC9B,IAAI,WAAW,EAAE,QAAQ;AACzB,IAAI,WAAW,EAAE,QAAQ;AACzB,IAAI,MAAM,EAAE,QAAQ;AACpB,IAAI,KAAK,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;AACzD,IAAI,OAAO,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACvD,IAAI,UAAU,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,IAAI,WAAW,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACO,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AACnC,IAAI,eAAe,EAAE,OAAO;AAC5B,IAAI,SAAS,EAAE,MAAM;AACrB,IAAI,iBAAiB,EAAE,OAAO;AAC9B,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,MAAM,EAAE,OAAO;AACnB,IAAI,gBAAgB,EAAE,QAAQ;AAC9B,IAAI,SAAS,EAAE,OAAO;AACtB,IAAI,OAAO,EAAE,OAAO;AACpB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;AACrC,IAAI,KAAK,EAAE,KAAK;AAChB,IAAI,KAAK,EAAE,eAAe;AAC1B,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,KAAK,EAAE,iBAAiB;AAC5B,IAAI,KAAK,EAAE,gBAAgB;AAC3B,IAAI,KAAK,EAAE,qBAAqB;AAChC,IAAI,MAAM,EAAE,kBAAkB;AAC9B,IAAI,MAAM,EAAE,oBAAoB;AAChC,IAAI,MAAM,EAAE,iBAAiB;AAC7B,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,KAAK,EAAE,cAAc;AACzB,IAAI,KAAK,EAAE,iBAAiB;AAC5B,IAAI,KAAK,EAAE,cAAc;AACzB,IAAI,KAAK,EAAE,gBAAgB;AAC3B,IAAI,KAAK,EAAE,YAAY;AACvB,CAAC,CAAC;AACF;AACO,MAAM,OAAO,GAAG,MAAM,CAAC;AAC9B,0BAA0B,KAAK,EAAE,KAAK;AACtC,iCAAiC,KAAK,EAAE,KAAK;AAC7C,wCAAwC,KAAK,EAAE,EAAE;AACjD,qDAAqD,SAAS,EAAE,IAAI;AACpE,8BAA8B,QAAQ,EAAE,SAAS;AACjD,+CAA+C,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AAC7E,iDAAiD,UAAU,EAAE,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAC/F,CAAC,CAAC;;AC1IF;AACO,SAAS,MAAM,CAAC,GAAG,IAAI,EAAE;AAChC,IAAI,MAAM,WAAW,GAAG,IAAI;AAC5B,SAAS,IAAI,EAAE;AACf,SAAS,GAAG,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACrE,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,KAAK;AAC5B,QAAQ,IAAI,MAAM,GAAG,CAAC,CAAC;AACvB,QAAQ,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;AACnC,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;AAC9B,gBAAgB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC;AACvD,gBAAgB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC7E,gBAAgB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAChF,gBAAgB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACjF,gBAAgB,QAAQ,IAAI;AAC5B,oBAAoB,KAAK,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC;AAC7D,oBAAoB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;AACzD,oBAAoB,KAAKrB,SAAO,CAAC,MAAM,CAAC,IAAIA,SAAO,CAAC,MAAM,CAAC;AAC3D,wBAAwB,MAAM,GAAG,GAAG,IAAI,MAAM,GAAG,MAAM,CAAC;AACxD,wBAAwB;AACxB,oBAAoB;AACpB,wBAAwB,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxF,wBAAwB;AACxB;AACA,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,OAAO,MAAM;AACrB,IAAI,CAAC;AACL;AACA;AACO,SAAS,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE;AACxC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AACtC;AACO,SAAS,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE;AAC3C,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC;AACzB,QAAQ,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;AACzC,IAAI,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC;AACzB,SAAS,MAAM,CAAC,IAAI,CAAC;AACrB,SAAS,IAAI,EAAE,CAAC;AAChB,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG;AAClC,KAAK;AACL,SAAS,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpE,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB;AACO,SAAS,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE;AAC3C,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK;AAClC,UAAU,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AAC3B,UAAU,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AACrC,IAAI,OAAO,UAAU,CAAC,KAAK;AAC3B,SAAS,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;AACnF;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK;AAClD,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;AAClD,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3F,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACtE,IAAI;AACJ,SAAS;AACT,QAAQ,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE;AACzD,YAAY,YAAY,EAAE,KAAK;AAC/B,YAAY,UAAU,EAAE,KAAK;AAC7B,YAAY,QAAQ,EAAE,KAAK;AAC3B,YAAY,KAAK,EAAE,MAAM;AACzB,SAAS,CAAC;AACV,IAAI;AACJ,CAAC;AACD,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,SAAS,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC1D,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAChC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC/B,SAAS,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AACvD,SAAS,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AACxD,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC/B,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AACjC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;AAClC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;AACb,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AACF,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY;AAClC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/B,IAAI,OAAO,IAAI;AACf,CAAC,CAAC;AACF,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,KAAK,EAAE;AAC1C,IAAI,OAAO;AACX,UAAU,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;AACpC,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC;AACF,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,GAAG,IAAI,EAAE;AAC7C,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI;AAC7D,IAAI,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,IAAI,OAAO,CAAC,CAAC;AACb,UAAU,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5C,UAAU,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3B,CAAC,CAAC;;AChCF,kDAA8D,MAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ;AAC3F,gCAAgC,MAAM,OAAO,GAAG,UAAU,EAAE;AAC5D;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,KAAK,GAAG,CAAC,MAAM;AACnB,IAAO,IAAK,UAAU,CAAC,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,CAAC,CAAC,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,CAAC,iBAAiB,CAAC,CAAC,mBAAmB,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC3V,IAAI,IAAI,gBAAgB,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC;AACpD,IAAI,IAAI,gBAAgB;AACxB,IAAI,IAAI,uBAAuB,GAAG,EAAE;AACpC,IAAI,IAAI,UAAU;AAClB,IAAI,IAAI,KAAK,GAAQ,MAAM;AAC3B,QAAQ,SAAS,UAAU,GAAG,IAAI,CAAC;AACnC,QAAQ,SAAS,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAClD,QAAQ;AACR,YAAY,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM;AAC5G,YAAY,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC;AACxL,YAAY,KAAK,GAAG,UAAU,GAAG,gBAAgB,CAAC,KAAK;AACvD,YAAY,IAAI,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACzJ;AACA;AACA,0CAA0C,WAAW,OAAO,GAAG,EAAE,OAAOsB,OAAa,CAAC,CAAC;AACvF,yCAAyC,WAAW,QAAQ,GAAG,EAAE,OAAOC,QAAc,CAAC,CAAC;AACxF,wCAAwC,WAAW,KAAK,GAAG,EAAE,OAAOC,KAAW,CAAC,CAAC;AACjF,uCAAuC,WAAW,MAAM,GAAG,EAAE,OAAOC,MAAY,CAAC,CAAC;AAClF,oDAAoD,WAAW,QAAQ,GAAG,EAAE,OAAOC,QAAc,CAAC,CAAC;AACnG,uDAAuD,WAAW,SAAS,GAAG,EAAE,OAAOC,SAAe,CAAC,CAAC;AACxG,iCAAiC,WAAW,MAAM,GAAG,EAAE,OAAOC,MAAY,CAAC,CAAC;AAC5E,uCAAuC,WAAW,OAAO,GAAG,EAAE,OAAOC,OAAa,CAAC,CAAC;AACpF,oDAAoD,WAAW,OAAO,GAAG,EAAE,OAAOC,OAAa,CAAC,CAAC;AACjG,4DAA4D,WAAW,MAAM,GAAG,EAAE,OAAO,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACvK,iCAAiC,WAAW,KAAK,GAAG,EAAE,OAAOC,KAAW,CAAC,CAAC;AAC1E,QAAQ;AACR;AACA;AACA,YAAY,UAAU,GAAG,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE;AACtD,oBAAoB,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK;AAClD,oBAAoB,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI;AAC7C,iBAAiB,CAAC,EAAE;AACpB;AACA,QAAQ;AACR,4DAA4D,aAAa,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;AACzF;AACA,QAAQ;AACR,sDAAsD,cAAc,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;AACxF;AACA,QAAQ;AACR,4DAA4D,eAAe,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AAC1F;AACA,QAAQ;AACR,2DAA2D,YAAY,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;AACvF;AACA,QAAQ;AACR;AACA,YAAY,gBAAgB,GAAG,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;AAC5D,oBAAoB,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC;AAC1J,wBAAwB,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AACnD;AACA,oBAAoB,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAChI,oBAAoB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,iBAAiB;AAChF,oBAAoB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,iBAAiB;AAChF,oBAAoB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACrD,oBAAoB,QAAQ,GAAG;AAC/B,wBAAwB,KAAK,EAAE;AAC/B,4BAA4B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACvD,wBAAwB,KAAK,CAAC;AAC9B,4BAA4B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACvD,wBAAwB,KAAK,CAAC;AAC9B,wBAAwB;AACxB,4BAA4B,OAAO,MAAM,CAAC;AAC1C;AACA,gBAAgB,CAAC,EAAE;AACnB;AACA,QAAQ;AACR;AACA,YAAY,aAAa,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACzF;AACA,QAAQ;AACR;AACA,YAAY,aAAa,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,KAAK;AACjD,oBAAoB,IAAI,QAAQ;AAChC,oBAAoB,IAAI;AACxB,wBAAwB,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,oBAAoB;AACpB,oBAAoB,OAAO,KAAK,EAAE,EAAE,CAAC;AACrC,oBAAoB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;AACjD,oBAAoB,OAAO,QAAQ;AACnC,wBAAwB,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC;AACzD,wBAAwB,MAAM,EAAE,SAAS,EAAE,QAAQ;AACnD,wBAAwB,OAAO,CAAC,MAAM;AACtC,wBAAwB,MAAM,CAAC;AAC/B,gBAAgB,CAAC,EAAE;AACnB;AACA,QAAQ,OAAO,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE;AAClC,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;AACjD,gBAAgB,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;AACtC,oBAAoB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACzC,wBAAwB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,wBAAwB,IAAI,CAAC,SAAS,GAAG,IAAI;AAC7C,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACrF,oBAAoB,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;AACzH,wBAAwB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChG,gBAAgB;AAChB,gBAAgB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAIC,SAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3F,oBAAoB,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAC9C,oBAAoB,IAAI,CAAC,IAAI,EAAE;AAC/B,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE;AAClC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;AAClC,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,KAAK,GAAG;AACtF,oBAAoB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;AACvD,oBAAoB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AACrD,oBAAoB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;AACnD,oBAAoB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AACrD,oBAAoB,UAAU,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC;AACjI,oBAAoB,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;AAC3D,oBAAoB,KAAK,EAAE,OAAO,CAAC,KAAK;AACxC,iBAAiB;AACjB,gBAAgB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE;AACtF,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,GAAGC,KAAW,CAAC,IAAI,EAAE,CAAC;AACpJ,gBAAgB;AAChB,oBAAoB,QAAQ;AAC5B,oBAAoB,QAAQ;AAC5B,oBAAoB,MAAM,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACrG,oBAAoB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACpD,oBAAoB,OAAO,EAAE,MAAM,CAAC,MAAM,CAACC,MAAY,CAAC;AACxD,oBAAoB,KAAK,EAAE;AAC3B,iBAAiB,CAAC;AAClB,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;AACnF,gBAAgB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACpD,oBAAoB,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;AAC9C,wBAAwB,OAAO,KAAK,CAAC,GAAG,CAAC;AACzC,gBAAgB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,gBAAgB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACtD,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;AAChP,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;AACvK,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9J,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC;AAC/T,YAAY;AACZ,YAAY,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI;AAC1E,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC;AAC7K,YAAY,OAAO,KAAK,CAAC,MAAM;AAC/B,QAAQ;AACR;AACA,QAAQ,SAAS,YAAY,GAAG,SAAS,YAAY,CAAC,GAAG,EAAE,EAAE,OAAO,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,GAAG,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,GAAG,SAAS,cAAc,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,GAAG,SAAS,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,KAAK,EAAE;AAC3e,YAAY,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;AAC9D,YAAY,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC;AAC9S,gBAAgB,OAAO;AACvB,YAAY,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,YAAY,MAAM,MAAM,GAAG;AAC3B,iBAAiB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,iBAAiB,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM;AACjJ,gBAAgB,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE;AAC/H,oBAAoB,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/M,wBAAwB,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/I,oBAAoB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE;AAC1E,wBAAwB,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC;AACjD,wBAAwB,UAAU,EAAE,IAAI;AACxC,wBAAwB,QAAQ,EAAE,IAAI;AACtC,wBAAwB,YAAY,EAAE;AACtC,qBAAqB,CAAC;AACtB,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE;AACxC,gBAAgB,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;AACtI,gBAAgB,MAAM,OAAO,GAAG,2CAA2C;AAC3E,gBAAgB,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE;AAC/H,oBAAoB,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC9M,wBAAwB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC7I,oBAAoB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;AACxE,wBAAwB,KAAK,EAAE,OAAO;AACtC,wBAAwB,UAAU,EAAE,IAAI;AACxC,wBAAwB,QAAQ,EAAE,IAAI;AACtC,wBAAwB,YAAY,EAAE;AACtC,qBAAqB,CAAC;AACtB,gBAAgB;AAChB,YAAY;AACZ,QAAQ,CAAC,EAAE,iBAAiB,GAAG,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACjE,YAAY,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;AAChE,YAAY,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;AACtM,gBAAgB,OAAO;AACvB,YAAY,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,YAAY,MAAM,MAAM,GAAG;AAC3B,iBAAiB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,iBAAiB,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM;AACjJ,gBAAgB,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE;AAC/H,oBAAoB,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/M,wBAAwB,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/I,oBAAoB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE;AAC1E,wBAAwB,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC;AACjD,wBAAwB,UAAU,EAAE,IAAI;AACxC,wBAAwB,QAAQ,EAAE,IAAI;AACtC,wBAAwB,YAAY,EAAE;AACtC,qBAAqB,CAAC;AACtB,gBAAgB;AAChB,YAAY;AACZ,QAAQ,CAAC,EAAE,iBAAiB,GAAG,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACjE,YAAY,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACzH,YAAY,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC;AACzM,gBAAgB,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACzD,YAAY,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI;AACxC,gBAAgB,MAAM,CAAC,GAAG,GAAG;AAC7B,gBAAgB,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,EAAE;AACnE,gBAAgB,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1D,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,EAAE,iBAAiB,GAAG,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACjE,YAAY,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC3D,YAAY,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;AAChD,YAAY,IAAI,GAAG,GAAG,KAAK,CAAC;AAC5B,YAAY;AACZ,iBAAiB,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK;AACzC,gBAAgB,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC;AACnF,gBAAgB,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC;AACnF,gBAAgB,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE;AAC9C,oBAAoB,OAAO;AAC3B,gBAAgB,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;AACtE,gBAAgB,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;AACvE,gBAAgB,IAAI,KAAK,IAAI,KAAK,EAAE;AACpC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACnF,oBAAoB,GAAG,GAAG,IAAI;AAC9B,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,YAAY,IAAI,GAAG;AACnB,gBAAgB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACjE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE;AAC3E,YAAY,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC;AAC/D,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC;AACtC,gBAAgB;AAChB,YAAY,IAAI,aAAa,CAAC,KAAK;AACnC,gBAAgB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC;AAC3G;AACA,YAAY,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK;AACxD,gBAAgB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;AACzC,gBAAgB,MAAM,KAAK,EAAE;AAC7B,gBAAgB,QAAQ,GAAG,CAAC,IAAI;AAChC,oBAAoB,KAAK,QAAQ;AACjC,wBAAwB,UAAU,CAAC,GAAG,CAAC,KAAK;AAC5C,6BAA6B,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACzF,wBAAwB;AACxB,oBAAoB,KAAK,QAAQ;AACjC,oBAAoB,KAAK,QAAQ;AACjC,wBAAwB,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACtE,wBAAwB;AACxB,oBAAoB,KAAK,OAAO;AAChC,wBAAwB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC/E,wBAAwB;AACxB;AACA,YAAY,CAAC;AACb,YAAY,UAAU,CAAC,aAAa;AACpC,iBAAiB,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK;AAC/C,gBAAgB,IAAI,WAAW,CAAC,MAAM,CAAC;AACvC,oBAAoB,OAAO;AAC3B,gBAAgB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;AAC1C,gBAAgB,QAAQ,MAAM;AAC9B,oBAAoB,KAAK,SAAS;AAClC,oBAAoB,KAAK,QAAQ;AACjC,oBAAoB,KAAK,OAAO;AAChC,oBAAoB,KAAK,QAAQ;AACjC;AACA,wBAAwB,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;AAC3H,4BAA4B,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;AAChJ,wBAAwB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AACxD,wBAAwB,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpE,4BAA4B,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,MAAM,KAAK;AACrE,kCAAkC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;AAChE,kCAAkC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,wBAAwB;AACxB,6BAA6B;AAC7B,4BAA4B,OAAO,CAAC,GAAG,CAAC,KAAK;AAC7C,iCAAiC,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACzG,wBAAwB;AACxB,wBAAwB;AACxB,oBAAoB,KAAK,YAAY;AACrC,wBAAwB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;AACtI,wBAAwB;AACxB,oBAAoB,KAAK,YAAY;AACrC,wBAAwB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAChE,wBAAwB;AACxB,oBAAoB,KAAK,OAAO;AAChC,wBAAwB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAChE,wBAAwB;AACxB,oBAAoB,KAAK,QAAQ;AACjC,wBAAwB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;AACtH,wBAAwB;AACxB,oBAAoB,KAAK,UAAU;AACnC,wBAAwB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACpE,wBAAwB,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK;AAC3E,wBAAwB;AACxB,oBAAoB,KAAK,SAAS;AAClC,wBAAwB,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;AACpN,4BAA4B,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACnF,wBAAwB,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/C,4BAA4B,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACzF,wBAAwB;AACxB,oBAAoB,KAAK,WAAW;AACpC,wBAAwB,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM;AAClG,wBAAwB;AACxB,oBAAoB,KAAK,SAAS;AAClC,wBAAwB,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClE,wBAAwB;AACxB,oBAAoB,KAAK,QAAQ;AACjC,wBAAwB,MAAM;AAC9B,oBAAoB;AACpB,wBAAwB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;AACzE,wBAAwB;AACxB;AACA,YAAY,CAAC,CAAC;AACd,YAAY,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;AACnH,YAAY,IAAI,UAAU,KAAK,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU;AAC/H,gBAAgB,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU;AACnD,YAAY,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC;AACpI,YAAY,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;AACjD,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;AACpG,YAAY,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5C,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;AACnG,YAAY,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AAC7C,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;AACpG,YAAY,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClG,QAAQ,CAAC,EAAE,iBAAiB,GAAG,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACjE,YAAY,OAAO,OAAO,CAAC,KAAK;AAChC,iBAAiB,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAChD,iBAAiB,GAAG,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,YAAY,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;AAC9F,QAAQ,CAAC,EAAE,mBAAmB,GAAG,SAAS,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,EAAE;AAC7G,YAAY,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;AAC7D,YAAY,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;AAC7C,YAAY,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACpC,gBAAgB,OAAO,EAAE;AACzB;AACA,YAAY,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,EAAE;AACvD,YAAY,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;AAChE,gBAAgB,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK;AACnD;AACA,YAAY,IAAI,SAAS,CAAC,KAAK;AAC/B,gBAAgB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACnD;AACA,YAAY,IAAI,SAAS,CAAC,OAAO;AACjC,gBAAgB,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;AACrF;AACA,YAAY,IAAI,SAAS,CAAC,OAAO;AACjC,gBAAgB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrE;AACA,YAAY,IAAI,IAAI,GAAG,SAAS,CAAC,OAAO,IAAI,EAAE;AAC9C,YAAY,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI;AACnD,QAAQ,CAAC,EAAE,kBAAkB,GAAG,SAAS,kBAAkB,CAAC,KAAK,EAAE;AACnE,YAAY,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO;AAC/C;AACA,YAAY,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC5S,gBAAgB;AAChB;AACA,YAAY,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;AAClH,gBAAgB,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE;AAC/C,YAAY,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACxC,YAAY,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;AAC5E,gBAAgB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9C;AACA,QAAQ,OAAO,SAAS,CAAC,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;AAC3G,YAAY,OAAO,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;AACtC,QAAQ;AACR;AACA,QAAQ,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;AACpH,YAAY,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;AAC1C,QAAQ;AACR;AACA,QAAQ,OAAO,SAAS,CAAC,GAAG,EAAE;AAC9B,YAAY,IAAI,EAAE,EAAE,EAAE;AACtB,YAAY,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE;AAClC,gBAAgB,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,GAAG,EAAE,GAAG,sBAAsB,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AACrL,gBAAgB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAChD,YAAY;AACZ,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC;AAC7B,gBAAgB,OAAO,GAAG;AAC1B,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACpD,gBAAgB,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AACzD,gBAAgB,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC;AACzD,YAAY;AACZ,YAAY,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D,QAAQ;AACR;AACA,QAAQ,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE;AACvC;AACA,YAAY,SAAS,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE;AAC7C,gBAAgB,IAAI,KAAK,GAAG,EAAE;AAC9B,oBAAoB,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;AAC5D,gBAAgB,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG;AAC7D,gBAAgB,IAAI,YAAY,CAAC,MAAM,CAAC;AACxC,oBAAoB,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpE,gBAAgB,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAClE,oBAAoB,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpE,gBAAgB,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;AACrE,oBAAoB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACxD,oBAAoB,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC,EAAE,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,EAAE,MAAM;AACvF,oBAAoB,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM;AAC3N,oBAAoB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACjD,oBAAoB,IAAI,GAAG,GAAG,OAAO,IAAI,OAAO,IAAI,MAAM,CAAC;AAC3D,oBAAoB,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC9D,wBAAwB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,wBAAwB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9D,wBAAwB,GAAG,GAAG,OAAO,GAAG,MAAM,CAAC,EAAE,MAAM,IAAI,OAAO,GAAG,MAAM,CAAC,EAAE;AAC9E,+BAA+B,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;AAC3E,+BAA+B,MAAM,CAAC,MAAM,CAAC;AAC7C,oBAAoB;AACpB,oBAAoB,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACnD,wBAAwB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACjE,wBAAwB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9D,4BAA4B,GAAG,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D,oBAAoB;AACpB,oBAAoB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,KAAK;AAC3D,0BAA0B,KAAK;AAC/B,0BAA0B,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAClD,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,YAAY,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACrC,YAAY,OAAO,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,QAAQ;AACR;AACA,QAAQ,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE;AACvC,YAAY,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC;AAClE,YAAY,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AAC9E,QAAQ;AACR;AACA,QAAQ,WAAW,MAAM,GAAG;AAC5B,YAAY,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;AACvH,QAAQ;AACR;AACA,QAAQ,WAAW,SAAS,GAAG;AAC/B,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACzD,YAAY,OAAO,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;AACpG,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ,WAAW,OAAO,GAAG;AAC7B,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACrE,YAAY,OAAO;AACnB,gBAAgB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrC,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzC,gBAAgB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3H,gBAAgB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnC,aAAa;AACb,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACvE,QAAQ,OAAO,GAAG,GAAG,EAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,CAAC;AACvE;AACA,QAAQ,WAAW,KAAK,GAAG;AAC3B,YAAY,OAAO,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY;AACrF,iBAAiB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;AACrD,QAAQ;AACR;AACA,QAAQ,WAAW,UAAU,GAAG;AAChC,YAAY,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK;AAC5C,iBAAiB,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;AAC3D,QAAQ;AACR;AACA,QAAQ,WAAW,OAAO,GAAG;AAC7B,YAAY,OAAO,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC/E,QAAQ;AACR;AACA;AACA;AACA,QAAQ,WAAW,KAAK,GAAG;AAC3B,YAAY,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,KAAK;AAC7F,YAAY,OAAO,MAAM,CAAC;AAC1B,gBAAgB,GAAG,KAAK;AACxB,gBAAgB,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;AAC7C,gBAAgB,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;AAC3C,gBAAgB,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;AACzC,gBAAgB,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;AAC3C,gBAAgB,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;AACjD,gBAAgB,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;AACjD,aAAa,CAAC;AACd,QAAQ;AACR;AACA,QAAQ,SAAS,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,GAAG,EAAE;AACnE,YAAY,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;AAC7C,YAAY,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;AAChF,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG;AAC/B,YAAY,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvD,QAAQ;AACR;AACA;AACA;AACA,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;AACnC,YAAY,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC;AACxH,YAAY,QAAQ,IAAI;AACxB,gBAAgB,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACtD,gBAAgB,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AACpD,gBAAgB,SAAS,OAAO,IAAI,CAAC,IAAI,CAAC;AAC1C;AACA,QAAQ;AACR;AACA,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;AAC5B,YAAY,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5D,QAAQ;AACR,QAAQ,KAAK,MAAM,CAAC,WAAW,CAAC,GAAG;AACnC,YAAY,OAAO,OAAO,CAAC;AAC3B,QAAQ;AACR;AACA;AACA,iCAAiC,MAAM;AACvC,mCAAmC,QAAQ,GAAG,EAAE;AAChD,8CAA8C,IAAI;AAClD,iDAAiD,IAAI;AACrD,oDAAoD,OAAO;AAC3D,iDAAiD,IAAI,GAAG,EAAE;AAC1D,qCAAqC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AAChE,2DAA2D,MAAM,GAAG;AACpE,0CAA0C,MAAM,EAAE,EAAE;AACpD,qEAAqE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE;AACxF,SAAS;AACT,QAAQ,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACzC,YAAY,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAC/C,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACtE,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1C;AACA,YAAY,IAAI;AAChB,gBAAgB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;AACnD,gBAAgB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACnE,gBAAgB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ;AACvD,gBAAgB,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3E,oBAAoB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;AACvE,wBAAwB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7E,gBAAgB;AAChB,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC;AAC5E,qBAAqB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK;AACzD,oBAAoB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3D,oBAAoB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC9D,gBAAgB,CAAC,CAAC;AAClB,gBAAgB,IAAI,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE;AAC/F,oBAAoB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;AACxH,oBAAoB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;AAC3F,gBAAgB;AAChB,gBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,gBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,gBAAgB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC1C,gBAAgB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACzC,YAAY;AACZ,YAAY,OAAO,GAAG,EAAE;AACxB,gBAAgB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC;AAC9D,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,qBAAqB,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAClJ,gBAAgB,OAAO,EAAE,CAAC;AAC1B,YAAY;AACZ,QAAQ;AACR;AACA;AACA,QAAQ,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;AAChD,YAAY,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;AACtD,gBAAgB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACxD,oBAAoB,YAAY,EAAE,KAAK;AACvC,oBAAoB,UAAU,EAAE,KAAK;AACrC,oBAAoB,GAAG,EAAE,YAAY;AACrC,wBAAwB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACnE,wBAAwB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;AACtE,4BAA4B,CAAC,IAAI,GAAG;AACpC,gCAAgC,KAAK;AACrC,gCAAgC,YAAY,EAAE,KAAK;AACnD,gCAAgC,QAAQ,EAAE,KAAK;AAC/C,gCAAgC,UAAU,EAAE;AAC5C;AACA,yBAAyB,CAAC,CAAC;AAC3B,wBAAwB,OAAO,MAAM,CAAC,KAAK,CAAC;AAC5C,oBAAoB;AACpB,iBAAiB,CAAC;AAClB,YAAY;AACZ,QAAQ;AACR;AACA;AACA,yCAAyC,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;AACnF,+CAA+C,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACtM,2CAA2C,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;AACtF,2CAA2C,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC;AAC3F,uCAAuC,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;AAChF,iDAAiD,IAAI,GAAG,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;AAC3F,sCAAsC,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;AAChF,0CAA0C,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;AACtF,4CAA4C,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;AACxF,kDAAkD,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC;AACnG,uDAAuD,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC;AACxG,sDAAsD,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC;AACtG,sDAAsD,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvI,4DAA4D,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC;AAC5G,yDAAyD,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AACrH,8CAA8C,IAAI,GAAG,GAAG,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACrG,iDAAiD,IAAI,GAAG,GAAG,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzG,gDAAgD,IAAI,GAAG,GAAG,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7G,kDAAkD,IAAI,GAAG,GAAG,EAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACxH,gDAAgD,IAAI,GAAG,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC;AAChG,qDAAqD,IAAI,IAAI,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAC,CAAC;AAC7G;AACA,QAAQ,IAAI,MAAM,GAAG;AACrB,YAAY,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxF,QAAQ;AACR,kEAAkE,IAAI,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1G,+DAA+D,IAAI,IAAI,GAAG,EAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzG,kEAAkE,IAAI,GAAG,GAAG,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AAChG,iCAAiC,IAAI,KAAK,GAAG;AAC7C,YAAY,OAAO,MAAM,CAAC;AAC1B,2CAA2C,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB,GAAG,KAAK,CAAC;AACtG,gDAAgD,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB;AACvF,gDAAgD,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9G,+CAA+C,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,gBAAgB;AACrF,aAAa,CAAC;AACd,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,MAAM,GAAG,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;AAChD,qDAAqD,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AACnI,oDAAoD,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAClI,qEAAqE,MAAM,CAAC,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7G,mEAAmE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3H,4DAA4D,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACpH,gEAAgE,KAAK,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACrH,6DAA6D,UAAU,GAAG,EAAE,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3K,2DAA2D,WAAW,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACnH,2DAA2D,WAAW,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACnH,+DAA+D,eAAe,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;AAC/H,uDAAuD,SAAS,GAAG,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;AAC3G,0DAA0D,MAAM,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,EAAEJ,OAAa,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACrK,mEAAmE,QAAQ,GAAG,EAAE,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACnJ,+DAA+D,MAAM,GAAG,EAAE,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5J,4DAA4D,OAAO,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/F;AACA;AACA;AACA,QAAQ,SAAS,CAAC,OAAO,EAAE;AAC3B;AACA,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC;AACpH,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACjE;AACA,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC;AAClH,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;AACzC,YAAY,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC/G,QAAQ;AACR;AACA,QAAQ,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE;AAChC,YAAY,MAAM,KAAK,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AAChG,iBAAiB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1D,YAAY,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AACpF;AACA,YAAY,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AAC7D,YAAY,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,UAAU;AACzF,YAAY,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,UAAU;AAC1F,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;AAChI,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC5D,YAAY,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7I,YAAY,QAAQ,IAAI;AACxB,gBAAgB,KAAK,MAAM;AAC3B,gBAAgB,KAAK,MAAM;AAC3B,gBAAgB,KAAK,OAAO;AAC5B,gBAAgB,KAAK,WAAW;AAChC,oBAAoB,OAAO,KAAK;AAChC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI;AACxB,wBAAwB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5D,wBAAwB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1G,wBAAwB,IAAI,IAAI,CAAC,MAAM;AACvC,4BAA4B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU;AACxE,wBAAwB,OAAO,GAAG;AAClC,oBAAoB;AACpB,oBAAoB,OAAO,GAAG,EAAE;AAChC,wBAAwB,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACxF,wBAAwB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,gDAAgD,CAAC;AAC7J,wBAAwB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpD,4BAA4B,IAAI;AAChC,gCAAgC,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;AAC3G,4BAA4B;AAC5B,4BAA4B,MAAM,4BAA4B;AAC9D,wBAAwB;AACxB,wBAAwB,IAAI;AAC5B,4BAA4B,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;AAC3G,wBAAwB;AACxB,wBAAwB,MAAM,0CAA0C;AACxE,wBAAwB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC/D,wBAAwB,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACjD,4BAA4B,OAAO,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACxJ,wBAAwB,OAAO,QAAQ,CAAC,aAAa;AACrD,6BAA6B,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACjF,6BAA6B,YAAY,CAAC,GAAG,CAAC;AAC9C,oBAAoB;AACpB,gBAAgB,KAAK,wBAAwB;AAC7C,oBAAoB,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG;AAC/E,0BAA0B;AAC1B,0BAA0B,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;AAClE,gBAAgB,KAAK,oBAAoB;AACzC,gBAAgB,KAAK,wBAAwB;AAC7C,oBAAoB,OAAO;AAC3B,yBAAyB,eAAe,CAAC,EAAE;AAC3C,yBAAyB,YAAY,CAAC,GAAG,CAAC;AAC1C,gBAAgB,KAAK,oBAAoB;AACzC,oBAAoB,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;AACrD,gBAAgB,KAAK,yBAAyB;AAC9C,oBAAoB,OAAO;AAC3B,yBAAyB,WAAW,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE;AACpF,yBAAyB,eAAe,CAAC,EAAE;AAC3C,yBAAyB,YAAY,CAAC,GAAG,CAAC;AAC1C,gBAAgB,KAAK,wBAAwB;AAC7C,oBAAoB,OAAO;AAC3B,yBAAyB,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;AACzD,yBAAyB,eAAe,CAAC,EAAE;AAC3C,yBAAyB,YAAY,CAAC,GAAG,CAAC;AAC1C,gBAAgB,KAAK,kBAAkB;AACvC,oBAAoB,OAAO;AAC3B,yBAAyB,kBAAkB,CAAC,EAAE;AAC9C,yBAAyB,YAAY,CAAC,GAAG,CAAC;AAC1C,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,OAAO;AAC3B,yBAAyB,UAAU;AACnC,yBAAyB,YAAY,CAAC,EAAE;AACxC,yBAAyB,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3C,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,OAAO,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,EAAE;AACjF,yBAAyB,kBAAkB,CAAC,EAAE;AAC9C,yBAAyB,YAAY,CAAC,GAAG,CAAC;AAC1C,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7G,oBAAoB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACzF,oBAAoB,OAAO,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI;AACvG,yBAAyB,kBAAkB,CAAC,EAAE;AAC9C,yBAAyB,YAAY,CAAC,GAAG,CAAC;AAC1C,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,OAAO,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK;AACtE,yBAAyB,kBAAkB,CAAC,EAAE;AAC9C,yBAAyB,YAAY,CAAC,GAAG,CAAC;AAC1C,gBAAgB;AAChB,oBAAoB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,iCAAiC,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtK,oBAAoB,OAAO,KAAK;AAChC;AACA,QAAQ;AACR;AACA,QAAQ,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACnC,YAAY,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK;AACxC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE;AAC5C,kBAAkB,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC;AACzC,QAAQ;AACR;AACA,QAAQ,UAAU,CAAC,GAAG,EAAE;AACxB,YAAY,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM;AAC5D,gBAAgB,OAAO,KAAK;AAC5B,YAAY,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACtC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAIK,QAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzD,gBAAgB,OAAO,KAAK;AAC5B,YAAY,OAAO;AACnB,iBAAiB,IAAI,CAAC,GAAG,IAAIC,MAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,QAAQ;AACR;AACA,QAAQ,oBAAoB,CAAC,KAAK,EAAE;AACpC,YAAY,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC;AAClD,gBAAgB,OAAO,KAAK;AAC5B;AACA,YAAY,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;AACvC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAIA,MAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,OAAO,CAAC;AAC1E,gBAAgB,OAAO,KAAK;AAC5B;AACA,YAAY,OAAO;AACnB,iBAAiB,MAAM,CAAC,QAAQ;AAChC,iBAAiB,KAAK,CAAC,CAAC,GAAG,KAAKC,eAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/D,QAAQ;AACR,QAAQ,OAAO,CAAC,GAAG,IAAI,EAAE;AACzB,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;AACrD,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACxC,gBAAgB,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;AAChE,oBAAoB,KAAK,CAAC,UAAU,GAAG,IAAI;AAC3C,gBAAgB,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;AACxH,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,GAAG,KAAK,EAAE;AACtD,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;AACrC,YAAY,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG;AACvC,YAAY,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;AAClD,gBAAgB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK;AACvE,gBAAgB,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO;AAC1C,sBAAsB,QAAQ,CAAC,IAAI,CAAC,OAAO;AAC3C,sBAAsB,QAAQ;AAC9B,gBAAgB,IAAI,QAAQ;AAC5B,oBAAoB,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACrD,gBAAgB,IAAI,QAAQ;AAC5B,oBAAoB,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACrD,gBAAgB,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;AACrH,gBAAgB,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;AAC1C,oBAAoB,IAAI,EAAE,wBAAwB;AAClD,oBAAoB,KAAK,EAAE,GAAG;AAC9B,iBAAiB,CAAC;AAClB,YAAY;AACZ,YAAY,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE;AACxD,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClD,gBAAgB,OAAO,GAAG;AAC1B,YAAY;AACZ,YAAY,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;AACnC,gBAAgB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5C,gBAAgB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC;AAC/D,YAAY;AACZ,YAAY,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;AACvC,YAAY,IAAI,IAAI,KAAK,QAAQ,EAAE;AACnC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;AACnC,oBAAoB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACzD,oBAAoB,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAChE,gBAAgB;AAChB,gBAAgB,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AACzC,oBAAoB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC1D,oBAAoB,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AACzF,gBAAgB;AAChB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AACtC,oBAAoB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,4EAA4E,CAAC;AACtL,oBAAoB,OAAO,GAAG;AAC9B,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;AACjD,YAAY,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE;AAC1C,gBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC3D,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;AACnC,oBAAoB,SAAS;AAC7B,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACxF,gBAAgB,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC7D,gBAAgB,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC/D,gBAAgB,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAChE,gBAAgB,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC7D,gBAAgB,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9G,oBAAoB,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AACjE,gBAAgB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACvF,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACtH,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;AAChI,gBAAgB,MAAM;AACtB,YAAY;AACZ,YAAY,OAAO,GAAG;AACtB,QAAQ;AACR;AACA,QAAQ,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE;AAChC,YAAY,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,EAAE;AACpE,YAAY,UAAU,CAAC,MAAM,CAAC;AAC9B,iBAAiB,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5E,YAAY,OAAO,MAAM;AACzB,QAAQ;AACR;AACA,QAAQ,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE;AACvC,YAAY,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;AACpC,YAAY,IAAI;AAChB,gBAAgB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;AACnD,oBAAoB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACzD,oBAAoB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3D,oBAAoB,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;AAC7C,wBAAwB;AACxB,oBAAoB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AACjD,oBAAoB,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AACzR,oBAAoB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC;AAC5D,oBAAoB,IAAI,CAAC,KAAK;AAC9B,wBAAwB;AACxB,oBAAoB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;AAC/C,oBAAoB,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,UAAU;AACtG,oBAAoB,MAAM,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AAC9F,oBAAoB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;AACpD,oBAAoB,OAAO,MAAM,CAAC,GAAG,CAAC;AACtC,gBAAgB;AAChB,YAAY;AACZ,oBAAoB;AACpB,gBAAgB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AACzC,YAAY;AACZ;AACA,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;AACrE,gBAAgB,MAAM,EAAE,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACnH,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC1G,YAAY;AACZ;AACA,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AACpF,gBAAgB,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC5D,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;AACrI,gBAAgB,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC5D,YAAY,OAAO,QAAQ;AAC3B,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,cAAc,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;AACxD,YAAY,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACrC,YAAY,QAAQ,GAAG;AACvB,gBAAgB,KAAK,MAAM,CAAC;AAC5B,gBAAgB,KAAK,GAAG;AACxB,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,OAAO,CAAC;AAC5B,gBAAgB,KAAK,GAAG,CAAC;AACzB,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,OAAO,MAAM;AACjC,gBAAgB,KAAK,GAAG,CAAC;AACzB,gBAAgB,KAAK,MAAM;AAC3B,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,OAAO,CAAC,MAAM;AAClC,gBAAgB,KAAK,GAAG,CAAC;AACzB,gBAAgB,KAAK,KAAK;AAC1B,oBAAoB,OAAO,CAAC,MAAM,IAAI,MAAM;AAC5C,0BAA0B,CAAC;AAC3B,0BAA0B,EAAE,MAAM,GAAG,CAAC,CAAC;AACvC,gBAAgB,KAAK,IAAI,CAAC;AAC1B,gBAAgB,KAAK,IAAI;AACzB,oBAAoB,OAAO,CAAC,MAAM,GAAG,MAAM;AAC3C,0BAA0B,CAAC;AAC3B,0BAA0B,EAAE,MAAM,GAAG,CAAC,CAAC;AACvC,gBAAgB,KAAK,GAAG,CAAC;AACzB,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,OAAO,CAAC,MAAM,IAAI,MAAM;AAC5C,0BAA0B;AAC1B,2BAA2B,MAAM,GAAG,CAAC,CAAC;AACtC,gBAAgB,KAAK,IAAI,CAAC;AAC1B,gBAAgB,KAAK,IAAI;AACzB,oBAAoB,OAAO,CAAC,MAAM,GAAG,MAAM;AAC3C,0BAA0B;AAC1B,2BAA2B,MAAM,GAAG,CAAC,CAAC;AACtC,gBAAgB;AAChB,oBAAoB,OAAO,CAAC;AAC5B;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE;AACxC,YAAY,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM;AAChE,YAAY,IAAI,WAAW,CAAC,GAAG,CAAC;AAChC,gBAAgB,OAAO,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;AAC1E,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI;AAC7B,iBAAiB,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACjD,gBAAgB,OAAO,QAAQ,CAAC;AAChC,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAChD,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,gCAAgC,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAClK,gBAAgB,OAAO,QAAQ,CAAC;AAChC,YAAY;AACZ,YAAY,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC3G,YAAY,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC;AAChC,YAAY,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;AAC/C,iBAAiB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;AAClD,YAAY,MAAM,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC,SAAS;AACpD,mBAAmB,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC;AAC9H,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO;AACnB,iBAAiB,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/B,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE;AACrC,YAAY,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM;AACnE,YAAY,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC;AAC7E,gBAAgB,OAAO,QAAQ,CAAC;AAChC,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAChD,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,gCAAgC,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAClK,gBAAgB,OAAO,QAAQ;AAC/B,YAAY;AACZ,YAAY,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;AACjD,gBAAgB,IAAI,EAAE,EAAE,IAAI,QAAQ,CAAC,IAAI;AACzC,gBAAgB,KAAK,EAAE,EAAE,IAAI,QAAQ,CAAC,KAAK;AAC3C,gBAAgB,GAAG,EAAE,EAAE,IAAI,QAAQ,CAAC,GAAG;AACvC,aAAa,CAAC;AACd;AACA,YAAY,IAAI,GAAG,EAAE;AACrB,gBAAgB,MAAM,MAAM,GAAG,CAAC,GAAG;AACnC,gBAAgB,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,EAAE,GAAG,CAAC;AACxF,gBAAgB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG;AAClD,gBAAgB,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC;AACzE,gBAAgB,OAAO,MAAM,CAAC,KAAK,CAAC;AACpC,gBAAgB,OAAO,MAAM,CAAC,KAAK,CAAC;AACpC,gBAAgB,OAAO,MAAM,CAAC,KAAK,CAAC;AACpC,gBAAgB,OAAO,MAAM,CAAC,KAAK,CAAC;AACpC,gBAAgB,OAAO,QAAQ;AAC/B,YAAY;AACZ;AACA,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACvD,gBAAgB,MAAM,KAAK,GAAG;AAC9B,qBAAqB,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AACpE,qBAAqB,IAAI,GAAG,GAAG,CAAC;AAChC,gBAAgB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAChE,gBAAgB,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;AAChE,YAAY;AACZ;AACA,YAAY,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC;AAChC,YAAY,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,YAAY,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACpF,YAAY,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACpF,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;AACnE,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC;AACA,YAAY,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE;AAC1F,iBAAiB,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;AACrD,iBAAiB,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AACvD,QAAQ;AACR;AACA,QAAQ,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,QAAQ,EAAE;AAC1C,YAAY,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzC,gBAAgB,OAAO,QAAQ;AAC/B,YAAY,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACtF,YAAY,IAAI,EAAE,IAAI,EAAE,EAAE;AAC1B,gBAAgB,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACvE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AACzB,YAAY;AACZ,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;AACzC,gBAAgB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;AACtE,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACxC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACxC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACxC,YAAY;AACZ,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;AACrG,gBAAgB,EAAE,IAAI,EAAE,CAAC;AACzB,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE;AACjE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AACzB,YAAY,OAAO,QAAQ;AAC3B,iBAAiB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AACtH,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE;AACrC,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACjE,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACjE,YAAY,MAAM,IAAI,GAAG,GAAG,IAAI,GAAG;AACnC,YAAY,IAAI,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AACnF,gBAAgB,IAAI,IAAI,CAAC,MAAM;AAC/B,oBAAoB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvD,gBAAgB,QAAQ,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC5E,YAAY;AACZ,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;AACrC,YAAY,IAAI,GAAG,IAAI,GAAG,KAAK,QAAQ,CAAC,UAAU,EAAE;AACpD,gBAAgB,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG;AACjF,gBAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ;AACtD,gBAAgB,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC1D,YAAY;AACZ,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO,QAAQ;AAC3B,QAAQ;AACR;AACA,QAAQ,WAAW,CAAC,GAAG,EAAE;AACzB,YAAY,MAAM,MAAM,GAAG,EAAE;AAC7B,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU;AACrD,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACvC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACxC,YAAY,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACpC,gBAAgB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACjD,gBAAgB,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;AACpC,oBAAoB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;AAC5D,oBAAoB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzC,wBAAwB,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AACxG,wBAAwB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;AACpD,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACpC,oBAAoB,MAAM;AAC1B,YAAY;AACZ,YAAY,OAAO,MAAM,CAAC;AAC1B,QAAQ;AACR;AACA,QAAQ,YAAY,CAAC,GAAG,EAAE;AAC1B,YAAY,MAAM,MAAM,GAAG,EAAE;AAC7B,YAAY,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC9C,YAAY,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE;AAC/B,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC;AACvD,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACrC,oBAAoB,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AACtG,oBAAoB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;AAChD,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,MAAM;AACzB,QAAQ;AACR;AACA,QAAQ,WAAW,CAAC,GAAG,EAAE;AACzB,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC3E,YAAY,IAAI,WAAW,CAAC,GAAG,CAAC;AAChC,gBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACrI,YAAY,OAAO,GAAG;AACtB,QAAQ;AACR;AACA,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK;AAC3B,YAAY,OAAO,UAAU,CAAC,MAAM;AACpC,iBAAiB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK;AAC7C,gBAAgB,IAAI,SAAS,CAAC,GAAG,CAAC;AAClC,oBAAoB,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC5C,gBAAgB,OAAO,GAAG;AAC1B,YAAY,CAAC,EAAE,EAAE,CAAC;AAClB,QAAQ,CAAC;AACT;AACA,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE,KAAK;AACvC,YAAY,IAAI,EAAE;AAClB,YAAY,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE;AAClD,YAAY,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AAChD,YAAY,MAAM,SAAS,GAAG;AAC9B,gBAAgB,QAAQ,EAAE,EAAE;AAC5B,gBAAgB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;AACpC,aAAa;AACb,YAAY,sBAAsB,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,sBAAsB,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;AAC9K,YAAY,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAgB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;AACnE,oBAAoB,MAAM,MAAM,GAAG,KAAK;AACxC,oBAAoB,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;AACpD,yBAAyB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK;AACzD,wBAAwB,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU;AACtE,4BAA4B,OAAO,GAAG;AACtC,wBAAwB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;AACrD,wBAAwB,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG;AACnD,wBAAwB,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrD,4BAA4B,KAAK,UAAU;AAC3C,4BAA4B,KAAK,WAAW;AAC5C,4BAA4B,KAAK,UAAU;AAC3C,4BAA4B,KAAK,SAAS;AAC1C,4BAA4B,KAAK,UAAU;AAC3C,4BAA4B,KAAK,YAAY;AAC7C,4BAA4B,KAAK,YAAY;AAC7C,4BAA4B,KAAK,iBAAiB;AAClD,4BAA4B,KAAK,iBAAiB;AAClD,4BAA4B,KAAK,gBAAgB;AACjD,gCAAgC,OAAO;AACvC,qCAAqC,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;AAC9D,4BAA4B;AAC5B,gCAAgC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACzL,gCAAgC,OAAO,GAAG;AAC1C;AACA,oBAAoB,CAAC,EAAE,GAAG,CAAC;AAC3B,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC7G,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACpG,QAAQ,CAAC;AACT;AACA,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE,KAAK;AACvC,YAAY,IAAI,EAAE;AAClB,YAAY,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE;AAClD,YAAY,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AAChD,YAAY,MAAM,SAAS,GAAG;AAC9B,gBAAgB,QAAQ,EAAE,EAAE;AAC5B,gBAAgB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;AACpC,aAAa;AACb,YAAY,sBAAsB,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,sBAAsB,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;AAC9K,YAAY,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAgB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;AACnE,oBAAoB,IAAI,IAAI,CAAC,QAAQ;AACrC,wBAAwB,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC1D,oBAAoB,IAAI,IAAI,CAAC,QAAQ;AACrC,wBAAwB,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC1D,oBAAoB,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;AACpD,yBAAyB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK;AACxD,wBAAwB,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,UAAU;AACpE,4BAA4B,OAAO,GAAG;AACtC,wBAAwB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK;AACrE,4BAA4B,QAAQ,GAAG;AACvC,gCAAgC,KAAK,OAAO;AAC5C,gCAAgC,KAAK,KAAK;AAC1C,gCAAgC,KAAK,KAAK;AAC1C,oCAAoC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE;AACjH,gCAAgC;AAChC,oCAAoC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;AACnG;AACA,wBAAwB,CAAC,EAAE,GAAG,CAAC,CAAC;AAChC,wBAAwB,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrD,4BAA4B,KAAK,cAAc;AAC/C,gCAAgC,OAAO,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC;AAC/D,4BAA4B,KAAK,cAAc;AAC/C,gCAAgC,OAAO,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC;AAC/D,4BAA4B,KAAK,YAAY;AAC7C,4BAA4B,KAAK,UAAU;AAC3C,4BAA4B,KAAK,UAAU;AAC3C,4BAA4B,KAAK,WAAW;AAC5C,4BAA4B,KAAK,SAAS,CAAC;AAC3C,4BAA4B,KAAK,SAAS;AAC1C,gCAAgC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;AAC/D,4BAA4B,KAAK,UAAU;AAC3C,4BAA4B,KAAK,WAAW;AAC5C;AACA,4BAA4B,KAAK,SAAS;AAC1C,4BAA4B,KAAK,UAAU;AAC3C,4BAA4B,KAAK,YAAY;AAC7C,4BAA4B,KAAK,YAAY;AAC7C,4BAA4B,KAAK,iBAAiB;AAClD,4BAA4B,KAAK,iBAAiB;AAClD,4BAA4B,KAAK,gBAAgB;AACjD,gCAAgC,OAAO;AACvC,qCAAqC,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;AAC/D,4BAA4B,KAAK,QAAQ;AACzC,4BAA4B,KAAK,QAAQ;AACzC;AACA,4BAA4B,KAAK,QAAQ;AACzC,4BAA4B,KAAK,QAAQ;AACzC,4BAA4B,KAAK,QAAQ;AACzC,4BAA4B,KAAK,QAAQ;AACzC,4BAA4B,KAAK,QAAQ;AACzC,4BAA4B,KAAK,QAAQ;AACzC,4BAA4B,KAAK,QAAQ;AACzC,gCAAgC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AACnE,gCAAgC,OAAO;AACvC,qCAAqC,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;AAC9D,4BAA4B,KAAK,YAAY;AAC7C,gCAAgC,OAAO;AACvC,qCAAqC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC5E,qCAAqC,UAAU,EAAE;AACjD,4BAA4B,KAAK,YAAY;AAC7C,gCAAgC,OAAO,GAAG;AAC1C,4BAA4B,KAAK,aAAa;AAC9C,gCAAgC,OAAO;AACvC,qCAAqC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AACpD,qCAAqC,UAAU,EAAE;AACjD,4BAA4B,KAAK,YAAY;AAC7C,gCAAgC,OAAO;AACvC,qCAAqC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAClF,qCAAqC,UAAU,EAAE;AACjD,4BAA4B,KAAK,WAAW;AAC5C,gCAAgC,OAAO;AACvC,qCAAqC,UAAU,EAAE;AACjD,4BAA4B,KAAK,YAAY;AAC7C,4BAA4B,KAAK,cAAc;AAC/C,4BAA4B,KAAK,cAAc;AAC/C,gCAAgC,OAAO;AACvC,qCAAqC,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AAC3F;AACA,4BAA4B,KAAK,UAAU;AAC3C,gCAAgC,OAAO;AACvC,qCAAqC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC5E,qCAAqC,UAAU,EAAE;AACjD,4BAA4B,KAAK,UAAU;AAC3C,gCAAgC,OAAO,GAAG;AAC1C,4BAA4B,KAAK,WAAW;AAC5C,gCAAgC,OAAO;AACvC,qCAAqC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;AAClF,qCAAqC,UAAU,EAAE;AACjD,4BAA4B,KAAK,UAAU;AAC3C,gCAAgC,OAAO;AACvC,qCAAqC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAClF,qCAAqC,UAAU,EAAE;AACjD,4BAA4B,KAAK,SAAS;AAC1C,gCAAgC,OAAO;AACvC,qCAAqC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE;AACzF,qCAAqC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACvD,4BAA4B,KAAK,UAAU;AAC3C,gCAAgC,OAAO;AACvC,qCAAqC,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE;AAC1F,qCAAqC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACzD,4BAA4B,KAAK,YAAY;AAC7C,gCAAgC,OAAO;AACvC,qCAAqC,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE;AAC5F,qCAAqC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACzD,4BAA4B,KAAK,YAAY;AAC7C,gCAAgC,OAAO;AACvC,qCAAqC,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE;AAC5F,qCAAqC,GAAG,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;AAC/D;AACA,4BAA4B,KAAK,UAAU;AAC3C,gCAAgC,OAAO;AACvC,qCAAqC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACrD,qCAAqC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC5E,qCAAqC,UAAU;AAC/C,qCAAqC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AACjE,4BAA4B,KAAK,UAAU;AAC3C,gCAAgC,OAAO;AACvC,qCAAqC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AACjE,4BAA4B,KAAK,WAAW;AAC5C,gCAAgC,OAAO;AACvC,qCAAqC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;AACtD,qCAAqC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AACpD,qCAAqC,UAAU;AAC/C,qCAAqC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AACjE,4BAA4B,KAAK,UAAU;AAC3C,gCAAgC,OAAO;AACvC,qCAAqC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AACrF,qCAAqC,UAAU;AAC/C,qCAAqC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AACjE,4BAA4B,KAAK,SAAS;AAC1C,4BAA4B,KAAK,UAAU;AAC3C,4BAA4B,KAAK,YAAY;AAC7C,4BAA4B,KAAK,YAAY;AAC7C,gCAAgC,OAAO;AACvC,qCAAqC,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE;AACzF,qCAAqC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AACjE,4BAA4B;AAC5B,gCAAgC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3L,gCAAgC,OAAO,GAAG;AAC1C;AACA,oBAAoB,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5B,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC7G,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACpG,QAAQ,CAAC;AACT,QAAQ,OAAO,GAAG,CAAC,GAAG,KAAK;AAC3B,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,gBAAgB,OAAO,SAAS,CAAC;AACjC,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;AAClD,YAAY,IAAI,QAAQ,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACzD,kBAAkB,GAAG,CAAC,GAAG;AACzB,kBAAkB,MAAM,CAAC,GAAG,CAAC;AAC7B;AACA,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACzG,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAChI,gBAAgB,IAAI,KAAK,KAAK,EAAE,EAAE;AAClC,oBAAoB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;AAChE,oBAAoB,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;AACrF,gBAAgB;AAChB,YAAY;AACZ,YAAY,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK;AAC7E,gBAAgB,QAAQ,KAAK;AAC7B,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,oBAAoB,KAAK,MAAM,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACtE,oBAAoB,KAAK,MAAM,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACvD,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AACxD,oBAAoB,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,GAAG;AAC/C,oBAAoB,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,GAAG;AAC/C,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,oBAAoB,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AAC1D,oBAAoB,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AAC1D,oBAAoB,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,GAAG;AAC/C,oBAAoB,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,GAAG;AAC/C,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;AACtF,oBAAoB,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;AAClE,oBAAoB,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;AAClE,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,oBAAoB,KAAK,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,oBAAoB,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9F,oBAAoB,KAAK,QAAQ,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACzF,oBAAoB,KAAK,IAAI,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AACxD,oBAAoB,KAAK,MAAM,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC5D,oBAAoB,KAAK,IAAI,EAAE,OAAO,IAAI,CAAC,EAAE;AAC7C,oBAAoB,SAAS;AAC7B,wBAAwB,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO;AACvD,8BAA8B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjE,8BAA8B,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3C,oBAAoB;AACpB;AACA,YAAY,CAAC,CAAC;AACd,YAAY,MAAM,mBAAmB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvI,YAAY,QAAQ,mBAAmB,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM;AACpE,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE;AAC/C,YAAY,IAAI,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI;AACtC,YAAY,QAAQ,IAAI;AACxB,gBAAgB,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC3E,oBAAoB,IAAI,GAAG,GAAG,CAAC;AAC/B,oBAAoB,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK;AAC/C,oBAAoB;AACpB,gBAAgB,KAAK,QAAQ,CAAC,GAAG,CAAC;AAClC,oBAAoB,KAAK,GAAG,GAAG,CAAC;AAChC,oBAAoB,IAAI,QAAQ,CAAC,KAAK,CAAC;AACvC,wBAAwB,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK;AAClD;AACA,wBAAwB,IAAI,GAAG,KAAK,CAAC;AACrC,oBAAoB;AACpB,gBAAgB,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC;AACrD,oBAAoB,IAAI,GAAG,KAAK,CAAC;AACjC,oBAAoB,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG;AAC7C,oBAAoB;AACpB,gBAAgB,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC;AACrD,oBAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;AAC7E,oBAAoB;AACpB,gBAAgB,KAAK,QAAQ,CAAC,KAAK,CAAC;AACpC,oBAAoB,IAAI,GAAG,KAAK;AAChC,oBAAoB,KAAK,GAAG,GAAG;AAC/B,oBAAoB;AACpB,gBAAgB,KAAK,QAAQ,CAAC,KAAK,CAAC;AACpC,oBAAoB,IAAI,GAAG,KAAK,CAAC,IAAI;AACrC,oBAAoB,KAAK,GAAG,GAAG;AAC/B,oBAAoB;AACpB,gBAAgB;AAChB,oBAAoB,KAAK,GAAG,GAAG,CAAC;AAChC;AACA,YAAY,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACxD,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU;AAC5E;AACA,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC;AACrJ,YAAY,IAAI,SAAS,CAAC,IAAI,CAAC;AAC/B,gBAAgB,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,YAAY,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE;AAC5C,gBAAgB,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ;AACjD,qBAAqB,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACtG,gBAAgB,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;AAC7E,YAAY;AACZ,YAAY,OAAO,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AAClE,QAAQ;AACR;AACA,QAAQ,MAAM,CAAC,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE;AAChC,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACtD,YAAY,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;AAC1D,YAAY,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;AAC9D,YAAY,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW;AACjF,iBAAiB,GAAG,CAAC,IAAI,CAAC,GAAG;AAC7B,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC3D,iBAAiB,IAAI,CAAC,EAAE,CAAC;AACzB,YAAY,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACtG,YAAY,QAAQ,GAAG,CAAC,IAAI;AAC5B,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AACvD,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AACxD,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AACvD,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;AACtD,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AACvD,gBAAgB,KAAK,SAAS;AAC9B,oBAAoB,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;AACzD,gBAAgB,KAAK,SAAS;AAC9B,oBAAoB,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;AACzD,gBAAgB,KAAK,cAAc;AACnC,gBAAgB,KAAK,cAAc;AACnC,gBAAgB,KAAK,aAAa;AAClC,oBAAoB,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxC,gBAAgB;AAChB,oBAAoB,OAAO,GAAG,CAAC,GAAG;AAClC;AACA,QAAQ;AACR,QAAQ;AACR,YAAY,iBAAiB,CAAC,UAAU,EAAE,uBAAuB,CAAC;AAClE;AACA,KAAK;AACL,IAAI,OAAO,KAAK,GAAG,UAAU;AAC7B,CAAC;AAED;AACA;AACA,KAAK,CAAC,IAAI,EAAE,CAAC;AACb;AACA,yBAAqC,MAAC,OAAO,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO;AAChF,8BAA0C,MAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE;AACvG,wBAAoC,MAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;AAC9F,sBAAkC,MAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;;ACn+C7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,MAAM,GAAG,CAAC,MAAM;AACpB,IAAI,IAAI,cAAc;AACtB,IAAI,IAAI,gBAAgB,GAAG,CAAC,SAAS,CAAC;AACtC,IAAI,IAAI,gBAAgB;AACxB,IAAI,IAAI,uBAAuB,GAAG,EAAE;AACpC,IAAI,IAAI,UAAU;AAClB,IAAI,IAAI,MAAM,GAAG,MAAM;AACvB,QAAQ,SAAS,UAAU,GAAG,IAAI,CAAC;AACnC,QAAQ,SAAS,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACnD,QAAQ;AACR,YAAY,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM;AAC5G,YAAY,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC;AACxL,YAAY,MAAM,GAAG,UAAU,GAAG,gBAAgB,CAAC,KAAK;AACxD,YAAY,IAAI,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACzJ;AACA,QAAQ,OAAO;AACf,QAAQ,OAAO,GAAG,EAAE;AACpB,QAAQ,IAAI;AACZ,QAAQ;AACR,YAAY,cAAc,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;AAC1C;AACA,QAAQ,OAAO,KAAK,GAAG,MAAM,CAAC;AAC9B,YAAY,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;AACtC,YAAY,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;AACxC,YAAY,QAAQ,EAAE,MAAM,CAAC,UAAU;AACvC,SAAS,CAAC;AACV;AACA,QAAQ,OAAO,IAAI,CAAC,GAAG,EAAE;AACzB,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC/B,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC;AAChC,oBAAoB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;AACxF,gBAAgB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC1P,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;AACxH,YAAY;AACZ,YAAY,IAAI,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,KAAK;AACrF,gBAAgB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;AACzG,YAAY,OAAO,MAAM,CAAC,MAAM;AAChC,QAAQ;AACR;AACA,QAAQ,QAAQ,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACrD,QAAQ,WAAW,MAAM,GAAG;AAC5B,YAAY,OAAO,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC;AAClF,QAAQ;AACR;AACA,QAAQ,MAAM,CAAC,GAAG,GAAG,EAAE;AACvB,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnC,gBAAgB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACvC,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AACpC,YAAY,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,GAAG,CAAC,CAAC;AACxD,QAAQ;AACR,QAAQ,WAAW,CAAC,GAAG,EAAE;AACzB,YAAY,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE;AAClD,YAAY,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE;AAC9H,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC/B,gBAAgB,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AAC9E,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;AAClW,gBAAgB,MAAM,SAAS,GAAG,OAAO,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACnJ,gBAAgB,MAAM,QAAQ,GAAG,OAAO,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChJ,gBAAgB,MAAM,QAAQ,GAAG,OAAO,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChJ,gBAAgB,IAAI,SAAS,CAAC,MAAM;AACpC,oBAAoB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACtF,gBAAgB,IAAI,QAAQ,CAAC,MAAM;AACnC,oBAAoB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACtF,gBAAgB,IAAI,QAAQ,CAAC,MAAM;AACnC,oBAAoB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACpF,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;AACtC,oBAAoB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACrF,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,EAAE;AACxC,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5I,YAAY;AACZ,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAClD,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChC,QAAQ;AACR,QAAQ,KAAK,MAAM,CAAC,WAAW,CAAC,GAAG;AACnC,YAAY,OAAO,QAAQ;AAC3B,QAAQ;AACR,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;AAC3B,YAAY,IAAI,IAAI,CAAC,SAAS;AAC9B,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC1D,QAAQ;AACR,QAAQ,IAAI,MAAM,GAAG;AACrB,YAAY,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACzC,QAAQ;AACR,QAAQ,IAAI,OAAO,GAAG;AACtB,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO;AACvC,QAAQ;AACR,QAAQ,IAAI,KAAK,GAAG;AACpB,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW;AACjD,QAAQ;AACR,QAAQ,IAAI,SAAS,GAAG;AACxB,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO;AAC9D,QAAQ;AACR,QAAQ,IAAI,UAAU,GAAG;AACzB,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ;AAC/D,QAAQ;AACR,QAAQ,IAAI,UAAU,GAAG;AACzB,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ;AAC/D,QAAQ;AACR,QAAQ,IAAI,SAAS,GAAG;AACxB,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO;AAC9D,QAAQ;AACR,QAAQ,QAAQ,GAAG;AACnB,YAAY,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AAC9C,QAAQ;AACR,QAAQ,OAAO,CAAC,KAAK,EAAE;AACvB,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;AAChC,gBAAgB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK;AAC5C,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ;AAC1D,gBAAgB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAY;AACZ;AACA,gBAAgB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChF,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO;AACvC,QAAQ;AACR,QAAQ,MAAM,CAAC,KAAK,EAAE;AACtB,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;AAChC,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK;AAC1C,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ;AAC1D,gBAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3C,YAAY;AACZ;AACA,gBAAgB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChF,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO;AACvC,QAAQ;AACR,QAAQ,IAAI,CAAC,EAAE,EAAE;AACjB,QAAQ;AACR,QAAQ;AACR,YAAY,iBAAiB,CAAC,UAAU,EAAE,uBAAuB,CAAC;AAClE;AACA,KAAK;AACL,IAAI,OAAO,MAAM,GAAG,UAAU;AAC9B,CAAC;;;;","x_google_ignoreList":[1]} \ No newline at end of file diff --git a/packages/tempo/dist/tempo.bundle.js b/packages/tempo/dist/tempo.bundle.js index bce087d1..e8645738 100644 --- a/packages/tempo/dist/tempo.bundle.js +++ b/packages/tempo/dist/tempo.bundle.js @@ -1067,10 +1067,12 @@ To add a polyfill to your project: const ZONED_DATE_TIME = enumify(['value', 'timeZoneId', 'calendarId', 'monthCode', 'offset', 'timeZone']).extend(ELEMENT.values()); const OPTION = enumify(['value', 'mdyLocales', 'mdyLayouts', 'store', 'discovery', 'debug', 'catch', 'timeZone', 'calendar', 'locale', 'pivot', 'sphere', 'timeStamp', 'snippet', 'layout', 'event', 'period', 'formats', 'plugins']); const PARSE = enumify(['mdyLocales', 'mdyLayouts', 'formats', 'pivot', 'snippet', 'layout', 'event', 'period', 'anchor', 'value', 'discovery', 'plugins']); + const DISCOVERY = enumify(['options', 'timeZones', 'terms', 'plugins']); var tempo_enum = /*#__PURE__*/Object.freeze({ __proto__: null, COMPASS: COMPASS, + DISCOVERY: DISCOVERY, DURATION: DURATION, DURATIONS: DURATIONS, ELEMENT: ELEMENT, @@ -1544,17 +1546,16 @@ To add a polyfill to your project: : asArray(a || []); // return the collated result }); - // #region Const variables /** key to use for storage / globalThis Symbol */ const $Tempo = Symbol.for('$Tempo'); /** current execution context*/ const Context = getContext(); - // #endregion Const variables + // #region Const variables /** * # Tempo * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. */ let Tempo = (() => { - var _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns; + var _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_getConfig; let _classDecorators = [Serializable, Immutable]; let _classDescriptor; let _classExtraInitializers = []; @@ -1641,20 +1642,24 @@ To add a polyfill to your project: locale; // cannot determine locale } }; } - // #endregion Static private methods - // #region Static public methods~~~~~~~~~~~~~~~~~~~~~~~~~~ - /** - * Bootstrap the library with a Custom Global Discovery object. - * - * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern - * and automatically calls `Tempo.init()` to apply the discovered configuration. - * - * @param config - The Global Discovery object to register. - * @returns The resolved global configuration. - */ - static discover(config) { - globalThis[$Tempo] = config; - return this.init(); + static load(arg, options) { + asArray(arg).flat(1).forEach(item => { + if (isFunction(item)) { + if (!item.installed) { + item(options, this, (val) => new this(val)); // handle Plugins (Functional extension) + item.installed = true; + } + } + if (isObject(item) && isString(item.key) && isFunction(item.define)) { + if (!__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).some(term => term.key === item.key)) + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).push(item); // handle TermPlugins (Grammar extension) + } + if (isObject(item) && ownKeys(item).some(key => DISCOVERY.has(key))) { + globalThis[$Tempo] = item; // handle Discovery (Configuration bootstrapping) + this.init(); + } + }); + return this; } /** * Initializes the global default configuration for all subsequent `Tempo` instances. @@ -1692,7 +1697,7 @@ To add a polyfill to your project: for (const key of Object.keys(Token)) // purge user-allocated Tokens if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys delete Token[key]; - Tempo.addTerm(...registerTerms); // register built-in term plugins + this.load(registerTerms); // register built-in term plugins const storeKey = Symbol.keyFor($Tempo); __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), $Tempo)); @@ -1767,7 +1772,8 @@ To add a polyfill to your project: if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales')) monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global) return monthDay.some(mdy => { - const tzs = mdy.timeZones ?? mdy.getTimeZones?.() ?? []; + const m = mdy; + const tzs = m.timeZones ?? m.getTimeZones?.() ?? []; return tzs.includes(shape.config.timeZone); }); }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) { @@ -1863,7 +1869,7 @@ To add a polyfill to your project: shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal; break; case 'plugins': - asArray(optVal).forEach(p => this.extend(p)); + asArray(optVal).forEach(p => this.load(p)); break; case 'anchor': break; // internal anchor used for relativity parsing @@ -1898,13 +1904,13 @@ To add a polyfill to your project: TimeZone[key.toLowerCase()] = value; // 2. Process Terms if (discovery.terms) - Tempo.addTerm(...asArray(discovery.terms)); + this.load(asArray(discovery.terms)); // 3. Process Formats if (discovery.formats) shape.config.formats = shape.config.formats.extend(discovery.formats); // 4. Process Plugins if (discovery.plugins) - asArray(discovery.plugins).forEach(p => this.extend(p)); + asArray(discovery.plugins).forEach(p => this.load(p)); // 4. Process Options let opts = discovery.options || {}; return isFunction(opts) ? opts() : opts; @@ -1920,18 +1926,6 @@ To add a polyfill to your project: for (const [sym, layout] of ownEntries(shape.parse.layout, true)) shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet)); }, Symbol.dispose)]() { Tempo.init(); } - /** - * Extends the Tempo class with new functionality. - * Plugins can add static or instance methods to the library. - */ - static extend(plugin, options) { - const p = plugin; - if (!p.installed) { - p(options, this, (val) => new this(val)); - p.installed = true; - } - return this; - } /** Reads options from persistent storage (e.g., localStorage). */ static readStore(key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { return getStorage(key, {}); @@ -2004,7 +1998,7 @@ To add a polyfill to your project: /** global discovery configuration */ static get discovery() { const sym = Symbol.for(this.config.discovery); - return getProxy(omit({ ...globalThis[sym], scope: 'discovery' }, 'value')); + return __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_getConfig).call(Tempo, sym); } /** * Returns a snapshot of the configuration layers used by Tempo. @@ -2026,15 +2020,6 @@ To add a polyfill to your project: return secure(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) .map(({ define, ...rest }) => rest)); // omit the 'define' method } - /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ - static addTerm(...plugin) { - asArray(plugin) - .flat(1) - .forEach(p => { - if (!__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).some(t => t.key === p.key)) // check for duplicate key - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).push(p); // append; silently ignore duplicates - }); - } /** static Tempo properties getter */ static get properties() { return secure(getAccessors(Tempo) @@ -2060,7 +2045,10 @@ To add a polyfill to your project: }); } /** iterate over Tempo properties */ - static [(Symbol.iterator)]() { + static [(_Tempo_getConfig = function _Tempo_getConfig(sym) { + const discovery = globalThis[sym]; + return getProxy(omit({ ...discovery, scope: 'discovery' }, 'value')); + }, Symbol.iterator)]() { return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters' } // #endregion Static public methods @@ -2102,7 +2090,8 @@ To add a polyfill to your project: try { this.#anchor = this.#options.anchor; this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg - if (['iso8601', 'gregory'].includes(this.#local.config['calendar'])) { + const cal = this.#local.config.calendar; + if (isString(cal) && ['iso8601', 'gregory'].includes(cal)) { for (const key of this.#local.config.formats.keys()) Object.assign(this.#fmt, { [key]: this.format(key) }); } @@ -2361,7 +2350,7 @@ To add a polyfill to your project: if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property) const { timeZone, calendar, value, ...options } = tempo; let zdt = !isEmpty(options) - ? dateTime.with({ ...options }) + ? dateTime.with(options) : dateTime; if (timeZone) zdt = zdt.withTimeZone(timeZone); // optionally set timeZone @@ -2453,7 +2442,7 @@ To add a polyfill to your project: } } finally { - this.#anchor = void 0; // reset anchor + this.#anchor = undefined; // reset anchor } // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date) if (isDefined(groups["mm"]) && !isNumeric(groups["mm"])) { @@ -2496,17 +2485,18 @@ To add a polyfill to your project: ? -adjust : -(adjust - 1); case '<=': // period before or including base-date + case '-=': return (period < offset) ? -adjust : -(adjust - 1); - case '>': // period after base-date + case '>': // period strictly after base-date case 'hence': - return (period > offset) + return (period >= offset) ? adjust : (adjust - 1); case '>=': // period after or including base-date case '+=': - return (period >= offset) + return (period > offset) ? adjust : (adjust - 1); default: // unexpected modifier @@ -2999,10 +2989,12 @@ To add a polyfill to your project: const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') }); if (isDefined(unit)) unit = `${singular(unit)}s`; // coerce to plural - return (isUndefined(unit) || since) // if no 'unit' provided, or if called via #since() - ? getAccessors(duration) // return an Object with all the duration accessors - .reduce((acc, dur) => Object.assign(acc, { [dur]: duration[dur] }), ifDefined({ iso: duration.toString(), unit })) - : duration.total({ relativeTo: this.#zdt, unit }); // sum-up the duration components + if (isUndefined(unit) || since) { + const res = getAccessors(duration) + .reduce((acc, dur) => Object.assign(acc, ifDefined({ [dur]: duration[dur] })), {}); + return Object.assign(res, { iso: duration.toString(), unit }); + } + return duration.total({ relativeTo: this.#zdt, unit }); } /** format the elapsed time between two Tempos (to nanosecond) */ #since(arg, until = {}) { diff --git a/packages/tempo/dist/tempo.bundle.js.map b/packages/tempo/dist/tempo.bundle.js.map index 38636573..4e0316b5 100644 --- a/packages/tempo/dist/tempo.bundle.js.map +++ b/packages/tempo/dist/tempo.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"tempo.bundle.js","sources":["temporal.polyfill.js","../../../node_modules/tslib/tslib.es6.mjs","../../shared/dist/type.library.js","../../shared/dist/reflection.library.js","../../shared/dist/utility.library.js","../../shared/dist/function.library.js","../../shared/dist/serialize.library.js","../../shared/dist/class.library.js","../../shared/dist/logify.class.js","../../shared/dist/object.library.js","../../shared/dist/coercion.library.js","../../shared/dist/storage.library.js","../../shared/dist/proxy.library.js","../../shared/dist/string.library.js","../../shared/dist/enumerate.library.js","tempo.config/tempo.enum.js","tempo.config/terms/term.utils.js","tempo.config/terms/term.quarter.js","tempo.config/terms/term.season.js","tempo.config/terms/term.zodiac.js","tempo.config/terms/term.timeline.js","tempo.config/terms/term.import.js","tempo.config/tempo.default.js","../../shared/dist/array.library.js","../../shared/dist/prototype.library.js","tempo.class.js","../../shared/dist/pledge.class.js"],"sourcesContent":["/**\n * This file verifies native Temporal API support.\n * Tempo requires an environment with native Temporal support or a user-provided polyfill.\n */\n// @ts-ignore\nif (!globalThis.Temporal) {\n const message = `\n[Tempo] Temporal API not found.\nThis library requires the ECMAScript Temporal API. Please ensure your environment \nsupports it natively (Node.js 20+, modern browsers) or provide your own polyfill.\n\nTo add a polyfill to your project:\n1. Install: npm install @js-temporal/polyfill\n2. Import at your entry point: import '@js-temporal/polyfill';\n`;\n console.error(message);\n throw new Error('Temporal API not found.');\n}\nexport {};\n//# sourceMappingURL=temporal.polyfill.js.map","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","/** the primitive type reported by toStringTag() */\nconst protoType = (obj) => Object.prototype.toString.call(obj).slice(8, -1);\n/**\n * return an object's type as a ProperCase string.\n * if instance, return Class name\n */\nexport const getType = (obj, ...instances) => {\n const type = protoType(obj);\n switch (true) {\n case type === 'Object':\n const name = isArrayLike(obj)\n ? 'ArrayLike' // special case Object: ArrayLike\n : obj.constructor?.name ?? 'Object'; // some Objects do not have a constructor method\n return (instances\n .find(inst => obj instanceof inst.class)?.type // allow for 'real' name of Instance, after minification\n ?? name); // return Object name\n case type === 'Function' && Function.prototype.toString.call(obj).startsWith('class '):\n return 'Class';\n default:\n return type;\n }\n};\n/** return TypeValue object */\nexport const asType = (value, ...instances) => ({ type: getType(value, ...instances), value });\n/** assert value is one of a list of Types */\nexport const isType = (obj, ...types) => types.includes(getType(obj));\n/** Type-Guards: assert \\ is of \\ */\nexport const isPrimitive = (obj) => isType(obj, 'String', 'Number', 'BigInt', 'Boolean', 'Symbol', 'Undefined', 'Void', 'Null', 'Empty');\nexport const isReference = (obj) => !isPrimitive(obj);\nexport const isIterable = (obj) => Symbol.iterator in Object(obj) && !isString(obj);\nexport const isString = (obj) => isType(obj, 'String');\nexport const isNumber = (obj) => isType(obj, 'Number') && isFinite(obj);\nexport const isInteger = (obj) => isType(obj, 'BigInt');\nexport const isIntegerLike = (obj) => isType(obj, 'String') && /^-?[0-9]+n$/.test(obj);\nexport const isDigit = (obj) => isType(obj, 'Number', 'BigInt');\nexport const isBoolean = (obj) => isType(obj, 'Boolean');\nexport const isArray = (obj) => isType(obj, 'Array');\nexport const isArrayLike = (obj) => protoType(obj) === 'Object' && 'length' in obj && Object.keys(obj).every(key => key === 'length' || !isNaN(Number(key)));\nexport const isObject = (obj) => isType(obj, 'Object');\nexport const isDate = (obj) => isType(obj, 'Date');\nexport const isRegExp = (obj) => isType(obj, 'RegExp');\nexport const isRegExpLike = (obj) => isType(obj, 'String') && /^\\/.*\\/$/.test(obj);\nexport const isSymbol = (obj) => isType(obj, 'Symbol');\nexport const isSymbolFor = (obj) => isType(obj, 'Symbol') && Symbol.keyFor(obj) !== undefined;\nexport const isPropertyKey = (obj) => isType(obj, 'String', 'Number', 'Symbol');\nexport const isNull = (obj) => isType(obj, 'Null');\nexport const isNullish = (obj) => isType(obj, 'Null', 'Undefined', 'Void', 'Empty');\nexport const isUndefined = (obj) => isType(obj, 'Undefined', 'Void', 'Empty');\nexport const isDefined = (obj) => !isNullish(obj);\nexport const isClass = (obj) => isType(obj, 'Class');\nexport const isFunction = (obj) => isType(obj, 'Function', 'AsyncFunction');\nexport const isPromise = (obj) => isType(obj, 'Promise');\nexport const isMap = (obj) => isType(obj, 'Map');\nexport const isSet = (obj) => isType(obj, 'Set');\nexport const isError = (err) => isType(err, 'Error');\nexport const isTemporal = (obj) => protoType(obj).startsWith('Temporal.');\n// non-standard Objects\nexport const isTempo = (obj) => isType(obj, 'Tempo');\nexport const isEnum = (obj) => isType(obj, 'Enumify');\nexport const isPledge = (obj) => isType(obj, 'Pledge');\nexport const nullToZero = (obj) => obj ?? 0;\nexport const nullToEmpty = (obj) => obj ?? '';\nexport const nullToValue = (obj, value) => obj ?? value;\n/** object has no values */\nexport const isEmpty = (obj) => false\n || isNullish(obj)\n || (isObject(obj) && (Reflect.ownKeys(obj).length === 0))\n || (isString(obj) && (obj.trim().length === 0))\n || (isNumber(obj) && (isNaN(obj) === true))\n || (isArray(obj) && (obj.length === 0))\n || (isSet(obj) && (obj.size === 0))\n || (isMap(obj) && (obj.size === 0));\nexport function assertCondition(condition, message) {\n if (!condition)\n throw new Error(message);\n}\nexport function assertString(str) { assertCondition(isString(str), `Invalid string: ${str}`); }\n;\nexport function assertNever(val) { throw new Error(`Unexpected object: ${val}`); }\n;\n//# sourceMappingURL=type.library.js.map","import { asType, getType, isEmpty, isFunction, isPrimitive } from '#core/shared/type.library.js';\n/** property marker used to unwrap proxies in ownEntries() */\nexport const $Target = Symbol.for('$Target');\n/** mutate Object | Array by excluding values with specified primitive 'types' */\nexport function exclude(obj, ...types) {\n const exclusions = types\n .map(item => item.toLowerCase()) // cast Primitives as Lowercase to aid in matching\n .distinct();\n if (obj && typeof obj === 'object') { // only works on Objects and Arrays\n const keys = [];\n ownEntries(obj)\n .forEach(([key, value]) => {\n const type = getType(value);\n if (['Object', 'Array'].includes(type)) // recurse into object\n exclude(value, ...exclusions);\n if (isPrimitive(value) && exclusions.includes(type.toLowerCase()))\n keys.push(key);\n });\n if (!isEmpty(keys)) // if any values to be excluded\n omit(obj, ...keys);\n }\n return obj; // return Object reference, even though Object has been mutated\n}\nexport function omit(obj, ...keys) {\n const { type, value } = asType(obj);\n switch (type) {\n case 'Array':\n if (isEmpty(keys)) {\n value.clear(); // clear entire Array\n break;\n }\n keys\n .sort()\n .reverse() // remove from end-to-start to preserve indexes\n .forEach(key => value.splice(Number(key), 1)); // remove Array index\n break;\n case 'Object':\n (isEmpty(keys) ? ownKeys(value) : keys) // if no {keys}, assume all ownKeys\n .forEach(key => Reflect.deleteProperty(value, key));\n }\n return value; // return Object reference, even though Object has been mutated\n}\n/** remove all ownKeys from an Object | Array */\nexport function purge(obj) {\n return omit(obj);\n}\n/** reset Object */\nexport function reset(orig, obj) {\n return Object.assign(purge(orig), { ...obj });\n}\n// These functions are to preserve the typescript 'type' of an object's keys & values\n// and will include both string and symbol keys\n/** array of all enumerable PropertyKeys */\nexport function ownKeys(json) {\n return ownEntries(json).map(([key]) => key);\n}\n/** array of all enumerable object values */\nexport function ownValues(json) {\n return ownEntries(json).map(([_, value]) => value);\n}\n/** tuple of enumerable entries with string | symbol keys */\nexport function ownEntries(json, all = false) {\n if (!json || typeof json !== 'object')\n return [];\n const getOwn = (obj) => {\n const tgt = obj[$Target] ?? obj; // unwrap if it's a proxy\n return Reflect.ownKeys(tgt)\n .filter(key => Object.getOwnPropertyDescriptor(tgt, key)?.enumerable)\n .map(key => [key, tgt[key]]);\n };\n if (!all)\n return getOwn(json);\n // all=true: collect per-level bottom-up, reverse to top-down, dedup via Map\n // Map preserves first-insertion position but allows value update (own key shadows ancestor)\n const levels = [];\n const limit = 50; // prevent infinite loops (increased from 10)\n let depth = 0;\n let proto = json;\n do {\n const t = proto[$Target] ?? proto; // CRITICAL: unwrap before checking marker to avoid trap recursion\n const lvl = getOwn(proto);\n if (lvl.length)\n levels.push(lvl);\n proto = Object.getPrototypeOf(t);\n } while (proto && proto !== Object.prototype && ++depth < limit);\n return [...new Map(levels.reverse().flat()).entries()];\n}\n/** return an Object containing all 'own' and 'inherited' enumerable properties */\nexport function allObject(json) {\n return Object.fromEntries(ownEntries(json, true));\n}\n/** get a string-array of 'getter' names for an object */\nexport const getAccessors = (obj = {}) => {\n return ownAccessors(obj, 'get');\n};\n/** get a string-array of 'setter' names for an object */\nexport const setAccessors = (obj = {}) => {\n return ownAccessors(obj, 'set');\n};\nconst ownAccessors = (obj = {}, type) => {\n const accessors = Object.getOwnPropertyDescriptors(obj.prototype || Object.getPrototypeOf(obj));\n return ownEntries(accessors)\n .filter(([_, descriptor]) => isFunction(descriptor[type]))\n .map(([key, _]) => key);\n};\n/** copy all Own properties (including getters / setters) to a new object */\nexport const copyObject = (target, source) => {\n return Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n};\n//# sourceMappingURL=reflection.library.js.map","import { ownValues } from '#core/shared/reflection.library.js';\nimport { isDefined, isReference } from '#core/shared/type.library.js';\n/** General utility functions */\n/** analyze the Call Stack to determine calling Function's name */\nexport const getCaller = () => {\n const stackTrace = new Error().stack // only tested in latest FF and Chrome\n ?.split('\\n')\n ?.map(itm => itm.trim())\n ?.filter(itm => !itm.startsWith('Error'))\n ?? [];\n const callerName = stackTrace[2].split(' ');\n return (callerName[1] === 'new') ? callerName[2] : callerName[1].split('.')[0];\n};\n/** analyze the Call Stack to determine calling Function's name */\nexport const getScript = (nbr = 1) => {\n const stackTrace = new Error().stack\n ?.match(/([^ \\n\\(@])*([a-z]*:\\/\\/\\/?)*?[a-z0-9\\/\\\\]*\\.js/ig)?.[nbr];\n return decodeURI(stackTrace ?? ''); // decodeURI is needed to handle spaces in file-names\n};\n/**\n * introduce a wait-timer that will Error() on timeOut.\n * best used with Promise.race([xxx(), sleep()]\n * @param msg\t\t\tstring to display on a timeout\n * @param timeOut\thow many milliseconds to sleep (default 2-seconds)\n * @returns\t\t\t\tPromise\\\n */\nexport const sleep = (msg = 'sleep: timed out', timeOut = 2000) => new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), timeOut));\n/** Javascript Runtimes */\nexport const CONTEXT = {\n 'Unknown': 'unknown',\n 'Browser': 'browser',\n 'NodeJS': 'nodejs',\n 'Deno': 'deno',\n 'GoogleAppsScript': 'google-apps-script',\n};\n/** determine JavaScript environment context */\nexport const getContext = () => {\n const global = globalThis;\n if (isDefined(global.SpreadsheetApp))\n return { global, type: CONTEXT.GoogleAppsScript };\n if (isDefined(global.window?.document))\n return { global, type: CONTEXT.Browser };\n if (isDefined(global.process?.versions?.node))\n return { global, type: CONTEXT.NodeJS };\n return { global, type: CONTEXT.Unknown };\n};\n// useful for those times when a full Enumify object is not needed, but still lock the Object from mutations\n/** deep-freeze an Array | Object to make it immutable */\nexport function secure(obj) {\n if (isReference(obj)) // skip primitive values\n ownValues(obj) // retrieve the properties on obj\n .forEach(val => Object.isFrozen(val) || secure(val)); // secure each value, if not already Frozen\n return Object.freeze(obj); // freeze the object itself\n}\n//# sourceMappingURL=utility.library.js.map","import { secure } from '#core/shared/utility.library.js';\nimport { isUndefined } from '#core/shared/type.library.js';\n/** curry a Function to allow partial calls */\nexport function curry(fn) {\n return function curried(...args) {\n return (args.length >= fn.length)\n ? fn(...args)\n : (...nextArgs) => curried(...args, ...nextArgs);\n };\n}\n/** generic function to memoize repeated function calls */\nexport function memoizeFunction(fn) {\n const cache = new Map(); // using a Map for better key handling than plain objects\n return function (...args) {\n const key = JSON.stringify(args); // create a unique key from arguments\n console.log('memoize: ', key);\n if (!cache.has(key)) {\n // @ts-ignore\n const result = fn.apply(this, args); // call the original function with the correct context\n console.log('set: ', result);\n cache.set(key, Object.freeze(result)); // stash the result for subsequent calls\n }\n else\n console.log('get: ', cache.get(key));\n return cache.get(key);\n };\n}\nconst wm = new WeakMap();\n/** manually clear the memoization cache for an object */\nexport function clearCache(obj) {\n wm.delete(obj);\n}\n/** define a Descriptor for an Object's memoized-method */\nexport function memoizeMethod(name, fn) {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n value: function (...args) {\n const key = `${String(name)},${JSON.stringify(args)}`;\n let cache = wm.get(this);\n if (!cache) { // add a new object into the WeakMap\n cache = Object.create(null);\n wm.set(this, cache);\n }\n if (isUndefined(cache[key])) { // first time for this method\n cache[key] = fn.apply(this, args); // evaluate the method\n secure(cache[key]); // freeze the returned value\n }\n return cache[key];\n }\n };\n}\n//# sourceMappingURL=function.library.js.map","import { curry } from '#core/shared/function.library.js';\nimport { ownKeys, ownValues, ownEntries } from '#core/shared/reflection.library.js';\nimport { isType, asType, isEmpty, isDefined, isUndefined, isNullish, isString, isObject, isArray, isFunction, isSymbolFor, isSymbol } from '#core/shared/type.library.js';\n/** registry of registered classes */\n// DO NOT EDIT THIS VALUE: used by decorator.library.ts\nexport const Registry = new Map();\n// be aware that 'structuredClone' preserves \\ values... \n// and JSON.stringify() does not\n/** make a deep-copy, using standard browser or JSON functions */\nexport function clone(obj, opts) {\n try {\n return globalThis.structuredClone(obj, opts);\n }\n catch {\n return cleanify(obj); // fallback to JSON functions\n }\n}\n/** return a copy. remove unsupported values (e.g. \\, function) */\nexport function cleanify(obj) {\n try {\n return JSON.parse(JSON.stringify(obj)); // run any toString() methods\n }\n catch (error) {\n console.warn('Could not clean object: ', obj);\n return { ...obj };\n }\n}\n/** deep-copy an Object, and optionally replace \\ fields with a Sentinel function call\t*/\nexport function cloneify(obj, sentinel) {\n try {\n return objectify(stringify(obj), sentinel);\n }\n catch (error) {\n console.warn('Could not cloneify object: ', obj);\n console.warn('stack: ', error.stack);\n return obj;\n }\n}\nfunction replacer(key, obj) { return isEmpty(key) ? obj : stringize(obj); }\nfunction reviver(_key, val) { return decode(val); }\n// safe-characters [sp \" ; < > [ ] ^ { | }]\nconst safeList = ['20', '22', '3B', '3C', '3E', '5B', '5D', '5E', '7B', '7C', '7D'];\n/** encode control characters, then replace a safe-subset back to text-string */\nfunction encode(val) {\n let enc = encodeURI(val);\n if (enc.includes('%')) { // if an encoded URI might be in string\n safeList.forEach(code => {\n const uri = '%' + code;\n const reg = new RegExp(uri, 'g');\n enc = enc.replace(reg, decodeURI(uri));\n });\n }\n return enc;\n}\n/** decode control characters */\nfunction decode(val) {\n if (isString(val)) {\n try {\n return decodeURI(val); // might fail if badly encoded '%'\n }\n catch (error) {\n // console.warn(`decodeURI: ${(error as Error).message} -> ${val}`);\n }\n }\n return val; // return original value\n}\n/** check type can be stringify'd */\nfunction isStringable(val) {\n return !isType(val, 'Function', 'AsyncFunction', 'WeakMap', 'WeakSet', 'WeakRef');\n}\n/** string representation of a single key:value Object */\nfunction oneKey(type, value) {\n return `{\"$${type}\":${value}}`;\n}\n/** Symbols in an Object-key will need special treatment */\nfunction fromSymbol(key) {\n return stringize(isSymbol(key) // @@(name) for global, @(name) for local symbols\n ? `${isSymbolFor(key) ? '@' : ''}@(${key.description ?? ''})`\n : key);\n}\nconst symKey = /^@(@)?\\(([^\\)]*)\\)$/; // pattern to match a stringify'd Symbol\n/** reconstruct a Symbol from a string-representation of a key */\nfunction toSymbol(value) {\n const [pat, keyFor, desc] = value.toString().match(symKey) || [null, undefined, undefined];\n switch (true) {\n case isSymbol(value): // already a Symbol\n case isNullish(pat): // incorrectly encoded Symbol\n case isDefined(keyFor) && isUndefined(desc): // incorrectly encoded global Symbol\n return value;\n case isDefined(keyFor): // global Symbol\n return Symbol.for(desc);\n case isUndefined(keyFor): // local Symbol\n default:\n return Symbol(desc);\n }\n}\n/**\n * For items which are not currently serializable via standard JSON.stringify (Undefined, BigInt, Set, Map, Symbol, etc.)\n * this creates a stringified, single key:value Object to represent the value; for example '{ \"$BigInt\": 123 }'\n *\n * Drawbacks:\n * no support Function / WeakMap / WeakSet / WeakRef\n * limited support for user-defined Classes (must be specifically registered with @Serialize() decorator)\n */\n/**\n * serialize Objects for string-safe stashing in WebStorage, Cache, etc\n * uses JSON.stringify where available, else returns stringified single key:value Object '{[$type]: value}'\n */\nexport function stringify(obj) {\n return stringize(obj, false);\n}\n/**\n * internal function to process stringify-requests (and hide second parameter)\n * where first argument is the object to stringify, and\n * the second argument is a boolean to indicate if function is being called recursively\n */\nfunction stringize(obj, recurse = true) {\n const arg = asType(obj);\n const one = curry(oneKey)(arg.type); // curry the oneKey() function\n switch (arg.type) {\n case 'String':\n if (!recurse) { // if a top-level string (e.g. 'true' or '1234')\n recurse = arg.value === 'true' // ensure true|false|null|1234 are quoted by JSON.stringify\n || arg.value === 'false' // so they will be correctly identified during objectify()\n || arg.value === 'null'\n || parseFloat(arg.value).toString() === arg.value;\n }\n return recurse\n ? JSON.stringify(encode(arg.value)) // encode string for safe-storage\n : encode(arg.value); // dont JSON.stringify a top-level string\n case 'Boolean':\n case 'Null':\n case 'Number':\n return JSON.stringify(arg.value); // JSON.stringify will correctly handle these\n case 'Void':\n case 'Undefined':\n return one(JSON.stringify('void')); // preserve 'undefined' values\t\t\n case 'BigInt':\n return one(arg.value.toString()); // even though BigInt has a toString method, it is not supported in JSON.stringify\n case 'Object':\n const obj = ownEntries(arg.value)\n .filter(([, val]) => isStringable(val))\n .map(([key, val]) => `${fromSymbol(key)}: ${stringize(val)}`)\n .join(',');\n return `{${obj}}`;\n case 'Array':\n const arr = arg.value\n .filter(val => isStringable(val))\n .map(val => stringize(val))\n .join(',');\n return `[${arr}]`;\n case 'Map':\n const map = Array.from(arg.value.entries())\n .filter(([, val]) => isStringable(val))\n .map(([key, val]) => `[${stringize(key)}, ${stringize(val)}]`)\n .join(',');\n return one(`[${map}]`);\n case 'Set':\n const set = Array.from(arg.value.values())\n .filter(val => isStringable(val))\n .map(val => stringize(val))\n .join(',');\n return one(`[${set}]`);\n case 'Symbol':\n return one(fromSymbol(arg.value));\n case 'RegExp':\n return one(stringize({ source: arg.value.source, flags: arg.value.flags }));\n case 'Class':\n default:\n const value = arg.value;\n switch (true) {\n case !isStringable(value): // Object is not stringify-able\n return undefined;\n case isFunction(value.toJSON): // Object has its own toJSON method\n return one(stringize(value.toJSON()));\n case isFunction(value.toString): // Object has its own toString method\n const str = value.toString();\n return one(str.includes('\"') // TODO: improve detection of JSON vs non-JSON strings\n ? str\n : JSON.stringify(str));\n case isFunction(value.valueOf): // Object has its own valueOf method\t\t\n return one(JSON.stringify(value.valueOf()));\n default: // else standard stringify\n return one(JSON.stringify(value, replacer));\n }\n }\n}\n/** rebuild an Object from its stringified representation */\nexport function objectify(str, sentinel) {\n if (!isString(str))\n return str; // skip parsing\n let parse;\n try {\n parse = JSON.parse(str, reviver); // catch if cannot parse\n }\n catch (error) {\n if (str.startsWith('\"') && str.endsWith('\"')) {\n console.warn(`objectify.parse: -> ${str}, ${error.message}`);\n return str; // bail-out\n }\n else\n return objectify(`\"${str}\"`, sentinel); // have another try, quoted\n }\n switch (true) {\n case str.startsWith('{') && str.endsWith('}'): // looks like Object\n case str.startsWith('[') && str.endsWith(']'): // looks like Array\n return traverse(parse, sentinel); // recurse into object\n default:\n return parse;\n }\n}\n/** recurse into Object / Array, looking for special single key:value Objects */\nfunction traverse(obj, sentinel) {\n if (isObject(obj)) {\n return typeify(ownEntries(obj)\n .reduce((acc, [key, val]) => Object.assign(acc, { [toSymbol(key)]: typeify(traverse(val, sentinel)) }), {}), sentinel);\n }\n if (isArray(obj)) {\n return ownValues(obj)\n .map(val => typeify(traverse(val, sentinel)));\n }\n return obj;\n}\n/** rebuild an Object from its single key:value representation */\nfunction typeify(json, sentinel) {\n if (!isObject(json) || ownKeys(json).length !== 1)\n return json; // only JSON Objects, with a single key:value pair\n const [$type, value] = ownEntries(json)[0];\n if (!String($type).startsWith('$'))\n return json; // not a serialized single key:value Object\n const type = $type.substring(1); // remove '$' prefix\n switch (type) {\n case 'String':\n case 'Boolean':\n case 'Object':\n case 'Array':\n return value; // these types are already handled by traverse()\n case 'Number':\n return Number(value);\n case 'BigInt':\n return BigInt(value);\n case 'Null':\n return null;\n case 'Undefined':\n case 'Empty':\n case 'Void':\n return sentinel?.(); // run Sentinel function to handle undefined values\n case 'Date':\n return new Date(value);\n case 'RegExp':\n return new RegExp(value.source, value.flags);\n case 'Symbol':\n return toSymbol(value);\n case 'Map':\n return new Map(value);\n case 'Set':\n return new Set(value);\n default:\n const cls = Registry.get($type); // lookup registered Class\n if (!cls) {\n console.warn(`objectify: dont know how to deserialize '${type}'`);\n return json; // return original JSON object\n }\n return Reflect.construct(cls, [value]); // create new Class instance\n }\n}\n//# sourceMappingURL=serialize.library.js.map","import { ownEntries } from '#core/shared/reflection.library.js';\nimport { Registry } from '#core/shared/serialize.library.js';\n/**\n * Some interesting Class Decorators\n */\n/** decorator to freeze a Class to prevent modification */\nexport function Immutable(value, { kind, name, addInitializer }) {\n name = String(name);\n switch (kind) {\n case 'class':\n const wrapper = {\n [name]: class extends value {\n constructor(...args) {\n super(...args);\n Object.freeze(this); // freeze the instance\n }\n }\n }[name];\n addInitializer(() => {\n const protect = (obj) => {\n ownEntries(Object.getOwnPropertyDescriptors(obj))\n .filter(([name]) => name !== 'constructor') // dont touch the constructor\n .forEach(([name, { configurable, writable }]) => {\n if (configurable) {\n const update = { configurable: false };\n if (writable)\n update.writable = false; // only data descriptors have 'writable'\n Object.defineProperty(obj, name, update);\n }\n });\n };\n protect(value); // protect original static members\n protect(value.prototype); // protect original prototype members\n protect(wrapper); // protect wrapper static members\n protect(wrapper.prototype); // protect wrapper prototype members\n });\n return wrapper;\n default:\n throw new Error(`@Immutable decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n/** register a Class for serialization */\nexport function Serializable(value, { kind, name, addInitializer }) {\n name = String(name); // cast as String\n switch (kind) {\n case 'class':\n addInitializer(() => Registry.set(`$${name}`, value)); // register the class for serialization, via its toString() method\n return value;\n default:\n throw new Error(`@Serializable decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n/** make a Class not instantiable */\nexport function Static(value, { kind, name }) {\n name = String(name);\n switch (kind) {\n case 'class':\n const wrapper = {\n [name]: class extends value {\n constructor(...args) {\n super(...args);\n throw new TypeError(`${name} is not a constructor`);\n }\n }\n }[name];\n return wrapper;\n default:\n throw new Error(`@Static decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n//# sourceMappingURL=class.library.js.map","import { __esDecorate, __runInitializers } from \"tslib\";\nimport { Immutable } from '#core/shared/class.library.js';\nimport { asType, isObject } from '#core/shared/type.library.js';\nconst Method = {\n Log: 'log',\n Info: 'info',\n Warn: 'warn',\n Debug: 'debug',\n Error: 'error',\n};\n/**\n * provide standard logging methods to the console for a class\n */\nlet Logify = (() => {\n let _classDecorators = [Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Logify = class {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Logify = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n #name;\n #opts = {};\n #log(method, ...msg) {\n if (this.#opts.debug)\n console[method](this.#name, ...msg);\n }\n /**\n * if {catch:true} then show a warning on the console and return\n * otherwise show an error on the console and re-throw the error\n */\n catch(...msg) {\n if (this.#opts.catch) {\n this.warn(...msg); // show a warning on the console\n return; // safe-return\n }\n this.error(...msg); // this goes to the console\n throw new Error(`${this.#name}${msg.map(m => isObject(m) ? JSON.stringify(m) : String(m)).join(' ')}`); // catch will be loud or silent, based on #catch config\n }\n /** console.log */ log = (...msg) => this.#log(Method.Log, ...msg);\n /** console.info */ info = (...msg) => this.#log(Method.Info, ...msg);\n /** console.warn */ warn = (...msg) => this.#log(Method.Warn, ...msg);\n /** console.debug */ debug = (...msg) => this.#log(Method.Debug, ...msg);\n /** console.error */ error = (...msg) => this.#log(Method.Error, ...msg);\n constructor(self, opts = {}) {\n const arg = asType(self);\n switch (arg.type) {\n case 'String':\n this.#name = arg.value;\n break;\n // @ts-ignore\n case 'Object':\n Object.assign(opts, arg.value);\n default:\n this.#name = (self ?? this).constructor.name.concat(': ') ?? '';\n }\n this.#opts.debug = opts.debug ?? false; // default debug to 'false'\n this.#opts.catch = opts.catch ?? false; // default catch to 'false'\t\t\t\t\t\t\t\t\n }\n };\n return Logify = _classThis;\n})();\nexport { Logify };\n//# sourceMappingURL=logify.class.js.map","import { ownKeys, ownEntries } from '#core/shared/reflection.library.js';\nimport { isObject, isArray, isReference, isFunction, isDefined, isEmpty, isNullish } from '#core/shared/type.library.js';\n/** Get nested value */\nexport function extract(obj, path, dflt) {\n if (isEmpty(path))\n return obj; // finished searching\n if (!isObject(obj) && !isArray(obj))\n return obj;\n return path\n .toString()\n .replace(/\\[([^\\[\\]]*)\\]/g, '.$1.') // convert [indexes] to properties\n .split('.')\n .filter(field => !isEmpty(field)) // remove empty fields\n .reduce((acc, field) => acc?.[field] ?? null, obj) ?? dflt;\n}\n/** remove quotes around property names */\nexport const unQuoteObj = (obj) => {\n return JSON.stringify(obj)\n ?.replace(/\"([^\"]+)\":/g, '$1: ')\n ?.replace(/,/g, ', ');\n};\n/** copy enumerable properties to a new Object */\nexport const asObject = (obj) => {\n if (isNullish(obj) || !isObject(obj))\n return obj;\n const temp = isArray(obj) ? [] : {};\n ownKeys(obj)\n .forEach(key => temp[key] = asObject(obj[key]));\n return temp;\n};\n/** deep-compare object values for equality */\nexport const isEqual = (obj1 = {}, obj2 = {}) => {\n const keys = new Set(); // union of unique keys from both Objects\n const keys1 = isFunction(obj1.keys) ? Array.from(obj1.keys()) : ownKeys(obj1);\n const keys2 = isFunction(obj2.keys) ? Array.from(obj2.keys()) : ownKeys(obj2);\n keys1.forEach(key => keys.add(key));\n keys2.forEach(key => keys.add(key));\n return [...keys] // cast as Array\n .every(key => {\n const val1 = obj1[key];\n const val2 = obj2[key];\n return isReference(val1) && isReference(val2)\n ? isEqual(val1, val2) // recurse into object\n : val1 === val2;\n });\n};\n/** find all methods on an Object */\nexport const getMethods = (obj, all = false) => {\n const properties = new Set();\n let currentObj = obj;\n do {\n Object\n .getOwnPropertyNames(currentObj)\n .map(key => properties.add(key));\n } while (all && (currentObj = Object.getPrototypeOf(currentObj)));\n return [...properties.keys()]\n .filter(key => isFunction(obj[key]));\n};\n/** extract only defined values from Object */\nexport function ifDefined(obj) {\n return ownEntries(obj)\n .reduce((acc, [key, val]) => {\n if (isDefined(val))\n acc[key] = val;\n return acc;\n }, {});\n}\n/** extract a subset of keys from an object */\nexport const pick = (obj, ...keys) => {\n const ownKeys = Object.getOwnPropertyNames(obj);\n return keys.reduce((acc, key) => {\n if (ownKeys.includes(key))\n acc[key] = obj[key];\n return acc;\n }, {});\n};\n/** extract a named key from an array of objects */\nexport const pluck = (objs, key) => objs.map(obj => obj[key]);\n/** extend an object with the properties of another */\nexport const extend = (obj, ...objs) => Object.assign(obj, ...objs);\nexport const countProperties = (obj = {}) => ownKeys(obj).length;\nexport function looseIndex(arg) {\n if (isDefined(arg))\n return isFunction(arg) ? arg() : arg;\n return (obj) => isFunction(obj) ? obj() : obj;\n}\n/** loose object with symbols values */\nlooseIndex.stringSymbol = looseIndex();\n/** loose object with symbol keys and RegExp values */\nlooseIndex.symbolRegExp = looseIndex();\n/** loose object with symbol keys and string values */\nlooseIndex.symbolString = looseIndex();\n/** loose object with string keys and string values */\nlooseIndex.stringString = looseIndex();\n//# sourceMappingURL=object.library.js.map","import { clone, stringify } from '#core/shared/serialize.library.js';\nimport { isIntegerLike, isArrayLike, isDefined, isInteger, isIterable, isNullish, isString, isUndefined, asType, isNumber } from '#core/shared/type.library.js';\nexport function asArray(arr = [], fill) {\n switch (true) {\n case isArrayLike(arr): // allow for {length:nn} objects\n case isIterable(arr) && !isString(arr): // dont iterate Strings\n return Array.from(arr, val => {\n return isUndefined(fill) || isDefined(val)\n ? val // if no {fill}, then use {val}\n : clone(fill); // clone {fill} to create new Objects\n });\n default:\n return Array.of(arr);\n }\n}\n/** stringify if not nullish */\nexport function asString(str) {\n return isNullish(str)\n ? ''\n : isInteger(str)\n ? str.toString() + 'n'\n : stringify(str);\n}\n/** convert String | Number | BigInt to Number */\nexport function asNumber(str) {\n return parseFloat(str?.toString() ?? 'NaN');\n}\n/** convert String | Number to BigInt */\nexport function asInteger(str) {\n const arg = asType(str);\n switch (arg.type) {\n case 'BigInt':\n return arg.value; // already a BigInt\n case 'Number':\n return BigInt(Math.trunc(arg.value)); // cast as BigInt\n case 'String':\n return (isIntegerLike(arg.value)) // String representation of a BigInt\n ? BigInt(arg.value.slice(0, -1)) // get rid of trailing 'n'\n : BigInt(arg.value);\n default:\n return str;\n }\n}\n/** test if can convert String to Numeric */\nexport function isNumeric(str) {\n const arg = asType(str);\n switch (arg.type) {\n case 'Number':\n case 'BigInt':\n return true;\n case 'String':\n return isIntegerLike(arg.value)\n ? true // is Number | BigInt\n : !isNaN(asNumber(str)) && isFinite(str); // test if Number\n default:\n return false;\n }\n}\n/** return as Number if possible, else original String */\nexport const ifNumeric = (str, stripZero = false) => {\n switch (true) {\n case isInteger(str): // BigInt → Number\n return Number(str);\n case isNumber(str): // Number → as-is\n return str;\n case isNumeric(str) && (!str?.toString().startsWith('0') || stripZero):\n return asNumber(str); // numeric String → Number\n default:\n return str; // non-numeric String → as-is\n }\n};\n//# sourceMappingURL=coercion.library.js.map","import { objectify, stringify } from '#core/shared/serialize.library.js';\nimport { CONTEXT, getContext } from '#core/shared/utility.library.js';\nimport { isDefined, isUndefined, isString } from '#core/shared/type.library.js';\nconst context = getContext();\nlet storage = context.type === CONTEXT.Browser\n ? context.global?.localStorage //as globalThis.Storage\t\t// default to localStorage in a browser\n : undefined;\n/** select local | session storage */\nexport function selStorage(store = 'local') {\n const name = (store + 'Storage');\n return storage = globalThis[name]; // return whichever was selected.\n}\nexport function getStorage(key, dflt) {\n let store;\n if (isUndefined(key))\n return dflt ?? {};\n switch (context.type) {\n case CONTEXT.Browser:\n store = storage.getItem(key);\n break;\n case CONTEXT.NodeJS:\n store = context.global.process.env[key];\n break;\n case CONTEXT.GoogleAppsScript:\n store = context.global.PropertiesService?.getUserProperties().getProperty(key);\n break;\n default:\n throw new Error(`Cannot determine Javascript context: ${context.type}`);\n }\n return isString(store)\n ? objectify(store) // rebuild object from its stringified representation\n : dflt;\n}\n/** set / delete storage */\nexport function setStorage(key, val) {\n const stash = isDefined(val) ? stringify(val) : undefined;\n const set = isDefined(stash);\n switch (context.type) {\n case CONTEXT.Browser:\n set\n ? storage.setItem(key, stash)\n : storage.removeItem(key);\n break;\n case CONTEXT.NodeJS:\n set\n ? (context.global.process.env[key] = stash)\n : (delete context.global.process.env[key]);\n break;\n case CONTEXT.GoogleAppsScript:\n set\n ? context.global.PropertiesService?.getUserProperties().setProperty(key, stash)\n : context.global.PropertiesService?.getUserProperties().deleteProperty(key);\n break;\n default:\n throw new Error(`Cannot determine Javascript context: ${context.type}`);\n }\n}\n//# sourceMappingURL=storage.library.js.map","import { $Target, allObject } from '#core/shared/reflection.library.js';\nimport { secure } from '#core/shared/utility.library.js';\nimport { isFunction } from '#core/shared/type.library.js';\n/** Node.js custom inspection symbol */\nconst $Inspect = Symbol.for('nodejs.util.inspect.custom');\n/** Stealth Proxy pattern to allow for iteration and logging over a Frozen object */\nexport function getProxy(target) {\n secure(target);\n const tgt = target[$Target] ?? target;\n let cachedJSON;\n return new Proxy(target, {\n isExtensible: (t) => Reflect.isExtensible(t),\n preventExtensions: (t) => Reflect.preventExtensions(t),\n getOwnPropertyDescriptor: (_, key) => Reflect.getOwnPropertyDescriptor(tgt, key),\n getPrototypeOf: () => Reflect.getPrototypeOf(tgt),\n deleteProperty: (_, key) => Reflect.deleteProperty(tgt, key),\n ownKeys: () => Reflect.ownKeys(tgt),\n has: (_, key) => Reflect.has(tgt, key),\n set: (_, key, val) => Reflect.set(tgt, key, val),\n get: (_, key, receiver) => {\n if (key === $Target)\n return tgt; // found the 'stop' marker\n if (key === $Inspect || key === 'toJSON') { // two special properties require virtual closures\n const own = Object.getOwnPropertyDescriptor(tgt, key);\n if (own && isFunction(own.value)) // if object already has its own toJSON, return\n return own.value;\n if (!cachedJSON) { // otherwise, create a virtual closure\n const result = allObject(receiver); // resolve full-object representation\n cachedJSON = () => result; // memoize for subsequent calls\n }\n return cachedJSON; // return the memoized closure\n }\n const val = Reflect.get(tgt, key, receiver);\n return (typeof val === 'function') // if the value is a function\n ? val.bind(tgt) // bind it to the target\n : val; // else return the value\n },\n });\n}\n//# sourceMappingURL=proxy.library.js.map","import { asNumber, asString, isNumeric } from '#core/shared/coercion.library.js';\nimport { stringify } from '#core/shared/serialize.library.js';\nimport { isString, isObject, assertCondition, assertString, nullToValue } from '#core/shared/type.library.js';\n// General functions\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// This section needs to be Function declarations so that they are hoisted\n// (because they are referenced in prototype.library)\n/**\n * clean a string to remove some standard control-characters (tab, line-feed, carriage-return) and trim redundant spaces.\n * allow for optional RegExp to specify additional match\n */\nexport function trimAll(str, pat) {\n return str\n .toString() // coerce to String\n .replace(pat, '') // remove regexp, if supplied\n .replace(/\\t/g, ' ') // replace with \n .replace(/(\\r\\n|\\n|\\r)/g, ' ') // replace & \n .replace(/\\s{2,}/g, ' ') // trim multiple \n .trim(); // leading/trailing \n}\n/** every word has its first letter capitalized */\nexport function toProperCase(...str) {\n return str\n .flat() // in case {str} was already an array\n .map(text => text.replace(/\\w\\S*/g, word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()))\n .join(' ');\n}\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst PAT = /[A-Z\\xC0-\\xD6\\xD8-\\xDE]?[a-z\\xDF-\\xF6\\xF8-\\xFF]+|[A-Z\\xC0-\\xD6\\xD8-\\xDE]+(?![a-z\\xDF-\\xF6\\xF8-\\xFF])|\\d+/g;\nexport const toCamelCase = (sentence) => {\n let [word, ...rest] = sentence.match(PAT) ?? [''];\n if (isNumeric(word)) {\n word = rest[0];\n rest.splice(0, 1);\n }\n return (sentence.startsWith('_') ? '_' : '') + word.toLocaleLowerCase() + toProperCase(...rest).replace(/ /g, '');\n};\nconst HEX = 16;\nexport const randomString = (len = 36) => {\n let str = '';\n do // generate random strings\n str += Math.floor(Math.random() * 10 ** 16).toString(HEX).substring(2, 15);\n while (str.length < len);\n return str.substring(0, len);\n};\nexport function sprintf(fmt, ...msg) {\n const regexp = /\\$\\{(\\d)\\}/g; // pattern to find \"${digit}\" parameter markers\n let sfmt = asString(fmt); // avoid mutate fmt\n if (!isString(fmt)) { // might be an Object\n msg.unshift(JSON.stringify(fmt)); // push to start of msg[]\n sfmt = ''; // reset the string-format\n }\n let cnt = 0; // if the format does not contain a corresponding '${digit}' then re-construct the parameters\n sfmt = sfmt.replace(/%[sj]/g, _ => `\\${${cnt++}}`); // flip all the %s or %j to a ${digit} parameter\n const params = Array.from(sfmt.matchAll(regexp))\n .map(match => Number(match[1])); // which parameters are in the fmt\n msg.forEach((_, idx) => {\n if (!params.includes(idx)) // if more args than params\n sfmt += `${sfmt.length === 0 ? '' : sfmt.endsWith(':') ? ' ' : ', '}\\${${idx}}`; // append a dummy params to fmt\n });\n // 2024-02-21 some Objects do not have a .toString method\n return sfmt.replace(regexp, (_, idx) => msg[idx]?.toString?.() || stringify(msg[idx]));\n}\n/** apply a plural suffix, if greater than '1' */\nexport const plural = (val, word, plural = word + 's') => {\n const _plural = (num, word, plural = word + 's') => [1, -1].includes(Number(num)) ? word : plural;\n return isObject(val)\n ? (num, word) => _plural(num, word, val[word])\n : _plural(val, word, plural);\n};\n/** strip a plural suffix, if endsWith 's' */\nexport const singular = (val) => val.endsWith('s') ? val.slice(0, -1) : val;\n/** make an Object's values into a Template Literals, and evaluate */\nexport const makeTemplate = (templateString) => (templateData) => new Function(`{${Object.keys(templateData).join(',')}}`, 'return `' + templateString + '`')(templateData);\nexport const toLower = (str) => isString(str) ? asString(str).toLowerCase().trim() : str;\nexport const toUpper = (str) => isString(str) ? asString(str).toUpperCase().trim() : str;\nexport const strlen = (str, min, max) => {\n assertString(str);\n assertCondition(str.length >= min && str.length <= (max ?? min), 'string length is not between specified min and max');\n return str;\n};\n/**\n * pad a string with leading character\n * @param\t\tnbr\tinput value to pad\n * @param\t\tlen\tfill-length (default: 2)\n * @param\t\tfill\tcharacter (default \\ for string and \\ for number)\n * @returns\tfixed-length string padded on the left with fill-character\n */\nexport const pad = (nbr = 0, len = 2, fill) => nbr.toString().padStart(len, nullToValue(fill, isNumeric(nbr) ? '0' : ' ').toString());\n/** pad a string with non-blocking spaces, to help right-align a display */\nexport const padString = (str, pad = 6) => (isNumeric(str) ? asNumber(str).toFixed(2).toString() : str.toString() ?? '').padStart(pad, '\\u007F');\n//# sourceMappingURL=string.library.js.map","import { __esDecorate, __runInitializers } from \"tslib\";\nimport { secure } from '#core/shared/utility.library.js';\nimport { Serializable } from '#core/shared/class.library.js';\nimport { stringify } from '#core/shared/serialize.library.js';\nimport { memoizeMethod } from '#core/shared/function.library.js';\nimport { ownEntries } from '#core/shared/reflection.library.js';\nimport { getProxy } from './proxy.library.js';\nimport { asType, isArray, isNumber } from '#core/shared/type.library.js';\n/** used to identify the Enumify type */ const tag = 'Enumify';\n/** helper method to create a property descriptor */\nfunction value(val) {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n value: val\n };\n}\n/**\n * private instance of the Enum Prototype, which is then Used to create each new Object-Enum\n*/\nconst ENUM = secure(Object.create(null, {\n count: memoizeMethod('count', function () { return this.entries().length; }),\n keys: memoizeMethod('keys', function () { return this.entries().map(([key]) => key); }),\n values: memoizeMethod('values', function () { return this.entries().map(([_, val]) => val); }),\n entries: memoizeMethod('entries', function () { return ownEntries(this, true); }),\n invert: memoizeMethod('invert', function () { return enumify(this.entries().reduce((acc, [key, val]) => ({ ...acc, [val]: key }), {})); }),\n toString: memoizeMethod('toString', function () { return stringify(this.toJSON()); }),\n has: value(function (key) { return this.keys().includes(key); }),\n includes: value(function (search) { return this.values().includes(search); }),\n keyOf: value(function (search) { return this.invert()[search]; }),\n extend: value(function (list) { return enumify.call(this, list); }),\n forEach: value(function (fn, thisArg) { this.entries().forEach((entry, index) => fn.call(thisArg, entry, index, this)); }),\n filter: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => (fn.call(thisArg, entry, index, this) ? Object.assign(acc, { [entry[0]]: entry[1] }) : acc), {})); }),\n map: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => { const res = fn.call(thisArg, entry, index, this); return Object.assign(acc, isArray(res) && res.length === 2 ? { [res[0]]: res[1] } : { [entry[0]]: res }); }, {})); }),\n [Symbol.iterator]: value(function () { return this.entries()[Symbol.iterator](); }),\n [Symbol.toStringTag]: value(tag),\n}));\nexport function enumify(list) {\n const proto = this ?? ENUM;\n const arg = asType(list);\n let stash = {};\n switch (arg.type) {\n case 'Enumify':\n case 'Object':\n Object.assign(stash, arg.value);\n break;\n case 'Array':\n arg.value.forEach((key, index) => {\n if (isNumber(key))\n throw new Error('Enumify: numeric keys are not supported');\n Object.assign(stash, { [key]: index });\n });\n break;\n default:\n throw new Error(`Enumify: invalid argument type: ${arg.type}`);\n }\n const target = Object.create(proto, Object.getOwnPropertyDescriptors(stash));\n return getProxy(target);\n}\n/** create an entry in the Serialization Registry to describe how to rebuild an Enum */\nlet Enumify = (() => {\n let _classDecorators = [Serializable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Enumify = class {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Enumify = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n constructor(list) {\n return enumify(list);\n }\n };\n return Enumify = _classThis;\n})();\nexport { Enumify };\n//# sourceMappingURL=enumerate.library.js.map","import { enumify } from '#core/shared/enumerate.library.js';\nimport { secure } from '#core/shared/utility.library.js';\n/**\n * Various enumerations used throughout Tempo library.\n * These are exported and added as static getters of the Tempo class.\n * Usage example:\n * ```typescript\n * \t\t\tconst dayNames = Tempo.WEEKDAY.keys();\t// ['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n * ```\n */\n/** */\nexport const WEEKDAY = enumify(['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']);\nexport const WEEKDAYS = enumify(['Everyday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']);\nexport const MONTH = enumify(['All', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);\nexport const MONTHS = enumify(['Every', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nexport const SEASON = enumify({ Summer: 'summer', Autumn: 'autumn', Winter: 'winter', Spring: 'spring' });\nexport const COMPASS = enumify({ North: 'north', East: 'east', South: 'south', West: 'west' });\n/** number of seconds in a time unit */\nexport const DURATION = enumify({\n /** approx number of seconds in a year */ year: 31_536_000,\n /** approx number of seconds in a month */ month: 2_628_000,\n /** number of seconds in a week */ week: 604_800,\n /** number of seconds in a day */ day: 86_400,\n /** number of seconds in an hour */ hour: 3_600,\n /** number of seconds in a minute */ minute: 60,\n /** one second */ second: 1,\n /** number of seconds in a millisecond */ millisecond: .001,\n /** number of seconds in a microsecond */ microsecond: .000_001,\n /** number of seconds in a nanosecond */ nanosecond: .000_000_001,\n});\n/** number of milliseconds in a time unit */\nexport const DURATIONS = enumify({\n /** approx number of milliseconds in a year */ years: DURATION.year * 1_000,\n /** approx number of milliseconds in a month */ months: DURATION.month * 1_000,\n /** number of milliseconds in a week */ weeks: DURATION.week * 1_000,\n /** number of milliseconds in a day */ days: DURATION.day * 1_000,\n /** number of milliseconds in an hour */ hours: DURATION.hour * 1_000,\n /** number of milliseconds in a minute */ minutes: DURATION.minute * 1_000,\n /** number of milliseconds in a second */ seconds: DURATION.second * 1_000,\n /** one millisecond */ milliseconds: DURATION.millisecond * 1_000,\n /** number of milliseconds in a microsecond */ microseconds: DURATION.microsecond * 1_000,\n /** number of milliseconds in a nanosecond */ nanoseconds: Number((DURATION.nanosecond * 1_000).toPrecision(6)),\n});\n/** pre-defined Format code short-cuts */\nexport const FORMAT = enumify({\n /** useful for standard date display */ display: '{www}, {dd} {mmm} {yyyy}',\n /** useful for standard datestamps */ weekDate: '{www}, {yyyy}-{mmm}-{dd}',\n /** useful for standard timestamps */ weekTime: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}',\n /** useful for standard full timestamps */ weekStamp: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}',\n /** useful for readable month and day */ dayMonth: '{dd}-{mmm}',\n /** useful for Date */ dayDate: '{dd}-{mmm}-{yyyy}',\n /** display with Time */ dayTime: '{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}',\n /** useful for stamping logs */ logStamp: '{yyyy}{mm}{dd}T{hhmiss}.{ff}',\n /** useful for sorting display-strings */ sortTime: '{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}',\n /** useful for sorting week order */ yearWeek: '{wy}{ww}',\n /** useful for sorting month order */ yearMonth: '{yyyy}{mm}',\n /** useful for sorting date order */ yearMonthDay: '{yyyy}{mm}{dd}',\n /** just Date portion */ date: '{yyyy}-{mm}-{dd}',\n /** just Time portion */ time: '{hh}:{mi}:{ss}',\n});\nexport const LIMIT = secure({\n /** Tempo(31-Dec-9999.23:59:59).ns */ maxTempo: Temporal.Instant.from('9999-12-31T23:59:59.999999999+00:00').epochNanoseconds,\n /** Tempo(01-Jan-1000.00:00:00).ns */ minTempo: Temporal.Instant.from('1000-01-01T00:00+00:00').epochNanoseconds,\n});\nexport const ELEMENT = enumify({\n yy: 'year',\n mm: 'month',\n ww: 'week',\n dd: 'day',\n hh: 'hour',\n mi: 'minute',\n ss: 'second',\n ms: 'millisecond',\n us: 'microsecond',\n ns: 'nanosecond',\n});\nexport const MUTATION = enumify(ELEMENT.values()).extend(['event', 'period', 'clock', 'time', 'date', 'start', 'mid', 'end']);\nexport const ZONED_DATE_TIME = enumify(['value', 'timeZoneId', 'calendarId', 'monthCode', 'offset', 'timeZone']).extend(ELEMENT.values());\nexport const OPTION = enumify(['value', 'mdyLocales', 'mdyLayouts', 'store', 'discovery', 'debug', 'catch', 'timeZone', 'calendar', 'locale', 'pivot', 'sphere', 'timeStamp', 'snippet', 'layout', 'event', 'period', 'formats', 'plugins']);\nexport const PARSE = enumify(['mdyLocales', 'mdyLayouts', 'formats', 'pivot', 'snippet', 'layout', 'event', 'period', 'anchor', 'value', 'discovery', 'plugins']);\n//# sourceMappingURL=tempo.enum.js.map","import { isDefined } from '#core/shared/type.library.js';\nconst SCHEMA = [\n ['year', 'yy'],\n ['month', 'mm'],\n ['day', 'dd'],\n ['hour', 'hh'],\n ['minute', 'mi'],\n ['second', 'ss'],\n ['millisecond', 'ms'],\n ['microsecond', 'us'],\n ['nanosecond', 'ns']\n];\n/**\n * find where a Tempo fits within a range of DateTime\n */\nexport function getTermRange(tempo, list, keyOnly = true) {\n const sorted = [...list]\n .sortBy('year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond')\n .toReversed();\n const match = sorted\n .find(range => {\n for (const [rKey, sKey] of SCHEMA) {\n const val = range[rKey];\n if (isDefined(val)) {\n const sVal = tempo[sKey];\n if (sVal > val)\n return true;\n if (sVal < val)\n return false;\n }\n }\n return true; // fallback if DateTime exactly matches a range criteria\n })\n ?? sorted.at(0); // fallback to wraparound at first item\n return keyOnly\n ? match?.key\n : match;\n}\n//# sourceMappingURL=term.utils.js.map","import { cloneify } from '#core/shared/serialize.library.js';\nimport { COMPASS } from '#core/tempo.config/tempo.enum.js';\nimport { getTermRange } from './term.utils.js';\n/** definition of fiscal quarter ranges */\nconst ranges = [\n [\n { key: 'Q1', day: 1, month: 1, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q2', day: 1, month: 4, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q3', day: 1, month: 7, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q4', day: 1, month: 10, fiscal: 0, sphere: COMPASS.North },\n ], [\n { key: 'Q1', day: 1, month: 7, fiscal: 1, sphere: COMPASS.South },\n { key: 'Q2', day: 1, month: 10, fiscal: 1, sphere: COMPASS.South },\n { key: 'Q3', day: 1, month: 1, fiscal: 0, sphere: COMPASS.South },\n { key: 'Q4', day: 1, month: 4, fiscal: 0, sphere: COMPASS.South },\n ]\n];\nexport const key = 'qtr';\nexport const scope = 'quarter';\nexport const description = 'Fiscal Quarter';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n const { yy, config: { sphere } } = this;\n const south = sphere !== COMPASS.North; // false = North, true = South\n const list = cloneify(ranges[+south]); // deep clone the range\n list.forEach(itm => itm.fiscal += yy); // calc the fiscal-year for quarter\n return getTermRange(this, list, keyOnly); // return the range\n}\n//# sourceMappingURL=term.quarter.js.map","import { cloneify } from '#core/shared/serialize.library.js';\nimport { COMPASS } from '#core/tempo.config/tempo.enum.js';\nimport { getTermRange } from './term.utils.js';\n/** definition of meteorological season ranges */\nconst ranges = [\n [\n { key: 'Spring', day: 20, month: 3, symbol: 'Flower', sphere: COMPASS.North },\n { key: 'Summer', day: 21, month: 6, symbol: 'Sun', sphere: COMPASS.North },\n { key: 'Autumn', day: 23, month: 9, symbol: 'Leaf', sphere: COMPASS.North },\n { key: 'Winter', day: 22, month: 12, symbol: 'Snowflake', sphere: COMPASS.North },\n ], [\n { key: 'Spring', day: 1, month: 9, symbol: 'Flower', sphere: COMPASS.South },\n { key: 'Summer', day: 1, month: 12, symbol: 'Sun', sphere: COMPASS.South },\n { key: 'Autumn', day: 1, month: 3, symbol: 'Leaf', sphere: COMPASS.South },\n { key: 'Winter', day: 1, month: 6, symbol: 'Snowflake', sphere: COMPASS.South },\n ], [\n { key: 'Spring', day: 1, month: 3, symbol: 'Flower', trait: 'A time of renewal and growth' },\n { key: 'Summer', day: 1, month: 6, symbol: 'Sun', trait: 'A period of heat and fruition' },\n { key: 'Autumn', day: 1, month: 9, symbol: 'Leaf', trait: 'A time for harvest and contraction' },\n { key: 'Winter', day: 1, month: 12, symbol: 'Snowflake', trait: 'A period of stillness and consolidation' },\n ]\n];\nexport const key = 'szn';\nexport const scope = 'season';\nexport const description = 'Meteorlogical season';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n const { config: { sphere } } = this;\n const south = sphere !== COMPASS.North; // false = North, true = South\n const list = cloneify(ranges[+south]);\n if (!keyOnly) {\n const cn = getTermRange(this, ranges[2], false); // get the chinese season for the current day/month\n list.forEach(item => item['CN'] = cn); // add the chinese season to each range item\n }\n return getTermRange(this, list, keyOnly);\n}\n//# sourceMappingURL=term.season.js.map","import { getTermRange } from './term.utils.js';\nimport { cloneify } from '#core/shared/serialize.library.js';\n/** definition of astrological zodiac ranges */\nconst ranges = [\n [\n { key: 'Aquarius', day: 20, month: 1, symbol: 'Ram', longitude: 300, planet: 'Uranus' },\n { key: 'Pisces', day: 19, month: 2, symbol: 'Fish', longitude: 330, planet: 'Neptune' },\n { key: 'Aries', day: 21, month: 3, symbol: 'Ram', longitude: 0, planet: 'Mars' },\n { key: 'Taurus', day: 20, month: 4, symbol: 'Bull', longitude: 30, planet: 'Venus' },\n { key: 'Gemini', day: 21, month: 5, symbol: 'Twins', longitude: 60, planet: 'Mercury' },\n { key: 'Cancer', day: 22, month: 6, symbol: 'Crab', longitude: 90, planet: 'Moon' },\n { key: 'Leo', day: 23, month: 7, symbol: 'Lion', longitude: 120, planet: 'Sun' },\n { key: 'Virgo', day: 23, month: 8, symbol: 'Maiden', longitude: 150, planet: 'Mercury' },\n { key: 'Libra', day: 23, month: 9, symbol: 'Scales', longitude: 180, planet: 'Venus' },\n { key: 'Scorpio', day: 23, month: 10, symbol: 'Scorpion', longitude: 210, planet: 'Pluto & Mars' },\n { key: 'Sagittarius', day: 22, month: 11, symbol: 'Centaur', longitude: 240, planet: 'Jupiter' },\n { key: 'Capricorn', day: 22, month: 12, symbol: 'Goat', longitude: 270, planet: 'Saturn' },\n ], [\n { key: 'Rat', traits: 'Adaptable, clever' },\n { key: 'Ox', traits: 'Diligent, strong' },\n { key: 'Tiger', traits: 'Passionate, courageous' },\n { key: 'Rabbit', traits: 'Artistic, gentle' },\n { key: 'Dragon', traits: 'Powerful, charismatic' },\n { key: 'Snake', traits: 'Wise, intuitive' },\n { key: 'Horse', traits: 'Energetic, independent' },\n { key: 'Goat', traits: 'Empathetic, calm' },\n { key: 'Monkey', traits: 'Smart, curious' },\n { key: 'Rooster', traits: 'Observant, hardworking' },\n { key: 'Dog', traits: 'Loyal, honest' },\n { key: 'Pig', traits: 'Compassionate, generous' },\n ], [\n { key: 'Wood' },\n { key: 'Fire' },\n { key: 'Earth' },\n { key: 'Metal' },\n { key: 'Water' },\n ]\n];\nexport const key = 'zdc';\nexport const scope = 'zodiac';\nexport const description = 'Astrological Zodiac sign';\n/** determine where the current Tempo instance fits within the above ranges */\nexport function define(keyOnly) {\n const list = cloneify(ranges[0]); // make a copy of the ranges array\n if (!keyOnly) {\n const cn = getChineseZodiac(this.yy); // get the chinese zodiac for the current year\n list.forEach(item => item['CN'] = cn); // add the chinese zodiac to each item\n }\n return getTermRange(this, list, keyOnly);\n}\n/** get the chinese zodiac for a given year */\nfunction getChineseZodiac(year) {\n const animalIndex = (year - 4) % 12; // calculate the animal index\n const elementIndex = Math.floor(((year - 4) % 10) / 2); // calculate the element index based on the last digit of the year\n const yinYang = year % 2 === 0 ? 'Yang' : 'Yin'; // determine Yin or Yang\n return {\n animal: ranges[1][animalIndex].key,\n traits: ranges[1][animalIndex].traits,\n element: ranges[2][elementIndex].key,\n yinYang: yinYang\n };\n}\n//# sourceMappingURL=term.zodiac.js.map","import { getTermRange } from './term.utils.js';\n/** definition of daily time periods */\nconst ranges = [\n { key: 'midnight', hour: 0 },\n { key: 'early', hour: 4 },\n { key: 'morning', hour: 8 },\n { key: 'midmorning', hour: 10 },\n { key: 'midday', hour: 12 },\n { key: 'afternoon', hour: 15, minute: 30 },\n { key: 'evening', hour: 18 },\n { key: 'night', hour: 20 },\n];\nexport const key = 'per';\nexport const scope = 'period';\nexport const description = 'Daily time period';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n return getTermRange(this, ranges, keyOnly);\n}\n//# sourceMappingURL=term.timeline.js.map","/**\n * Built-in term plugin registrations.\n *\n * This module exports a registration function to be called by tempo.class.ts.\n *\n * returns an array of Terms to be loaded into Tempo.#terms\n */\nimport * as qtr from './term.quarter.js';\nimport * as szn from './term.season.js';\nimport * as zdc from './term.zodiac.js';\nimport * as per from './term.timeline.js';\nexport default [\n { key: qtr.key, scope: qtr.scope, description: qtr.description, define: qtr.define },\n { key: szn.key, scope: szn.scope, description: szn.description, define: szn.define },\n { key: zdc.key, scope: zdc.scope, description: zdc.description, define: zdc.define },\n { key: per.key, scope: per.scope, description: per.description, define: per.define },\n];\n//# sourceMappingURL=term.import.js.map","import { looseIndex } from '#core/shared/object.library.js';\nimport { secure } from '#core/shared/utility.library.js';\n// BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW\n// TEMPO functionality heavily depends on these patterns\n/** common RegExp patterns */\nexport const Match = {\n /** match all {} pairs, if they start with a word char */ braces: /{([\\w]+(?:\\.[\\w]+)*)}/g,\n /** named capture-group, if it starts with a letter */ captures: /\\(\\?<([a-zA-Z][\\w]*)>(.*?)(?=) */ modifier: /[\\+\\-\\<\\>][\\=]?|this|next|prev|last/,\n /** offset post keywords (ago|hence) */ affix: /ago|hence/,\n /** strip out these characters from a string */ strips: /\\(|\\)/g,\n /** whitespace characters */ spaces: /\\s+/g,\n /** Z character */ zed: /^Z$/,\n};\n/** Tempo Symbol registry */\nexport const Token = looseIndex()({\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols\n /** year */ yy: Symbol('yy'),\n /** month */ mm: Symbol('mm'),\n /** day */ dd: Symbol('dd'),\n /** hour */ hh: Symbol('hh'),\n /** minute */ mi: Symbol('mi'),\n /** second */ ss: Symbol('ss'),\n /** fraction */ ff: Symbol('ff'),\n /** meridiem */ mer: Symbol('mer'),\n /** short weekday name */ www: Symbol('www'),\n /** relative-suffix */ afx: Symbol('afx'),\n /** time-suffix */ sfx: Symbol('sfx'),\n /** time unit */ unt: Symbol('unt'),\n /** separator */ sep: Symbol('sep'),\n /** modifier */ mod: Symbol('mod'),\n /** generic number */ nbr: Symbol('nbr'),\n /** Tempo event */ evt: Symbol('evt'),\n /** Tempo period */ per: Symbol('per'),\n /** time zone offset */ tzd: Symbol('tzd'),\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Layout Symbols\n /** date */ dt: Symbol('date'),\n /** time */ tm: Symbol('time'),\n /** date and time */ dtm: Symbol('dateTime'),\n /** day-month-year */ dmy: Symbol('dayMonthYear'),\n /** month-day-year */ mdy: Symbol('monthDayYear'),\n /** year-month-day */ ymd: Symbol('yearMonthDay'),\n /** day of month offset */ off: Symbol('offset'),\n /** weekDay */ wkd: Symbol('weekDay'),\n /** relative offset (years, days, hours, etc) */ rel: Symbol('relativeOffset'),\n /** timezone/calendar brackets */ brk: Symbol('brackets'),\n});\n/**\n * user will need to know these in order to configure their own patterns\n * Tempo.Snippet is a simple regex pattern object\t\t\t\t\t\te.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ }\n * Tempo.Layout is a string-combination of Snippet names\t\te.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?'\n * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex.\n * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument\n */\n/**\n * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy')\n */\n// Note: computed Components ('evt', 'per') are added during 'Tempo.init()' (for static) and/or 'new Tempo()' (per instance)\nexport const Snippet = looseIndex()({\n [Token.yy]: /(?([0-9]{2})?[0-9]{2})/, // arbitrary upper-limit of yy=9999\n [Token.mm]: /(?[0\\s]?[1-9]|1[0-2]|Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)/, // month-name (abbrev or full) or month-number 01-12\n [Token.dd]: /(?
[0\\s]?[1-9]|[12][0-9]|3[01])(?:\\s?(?:st|nd|rd|th))?/, // day-number 01-31\n [Token.hh]: /(?2[0-4]|[01]?[0-9])/, // hour-number 00-24\n [Token.mi]: /(\\:(?[0-5][0-9]))/, // minute-number 00-59\n [Token.ss]: /(\\:(?[0-5][0-9]))/, // seconds-number 00-59\n [Token.ff]: /(\\.(?[0-9]{1,9}))/, // fractional-seconds up-to 9-digits\n [Token.mer]: /(\\s*(?am|pm))/, // meridiem suffix (am,pm)\n [Token.sfx]: /((?:{sep}+|T)({tm}){tzd}?)/, // time-pattern suffix 'T {tm} Z'\n [Token.wkd]: /(?Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)/, // day-name (abbrev or full)\n [Token.tzd]: /(?Z|(?:\\+(?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:00)|-(?:(?:0[0-9]|1[0-1]):?[0-5][0-9]|12:00)))/, // time-zone offset\t+14:00 to -12:00\n [Token.nbr]: /(?[0-9]*)/, // modifier count\n [Token.afx]: new RegExp(`((s)? (?${Match.affix.source}))?{sep}?`), // affix optional plural 's' and (ago|hence)\n [Token.mod]: new RegExp(`((?${Match.modifier.source})?{nbr} *)`), // modifier (+,-,<,<=,>,>=) plus optional offset-count\n [Token.sep]: new RegExp(`(?:${Match.separator.source})`), // date-input separator character \"/\\\\-., \" (non-capture group)\n [Token.unt]: /(?year|month|week|day|hour|minute|second|millisecond)(?:s)?/, // useful for '2 days ago' etc\n [Token.brk]: /(\\[(?[^\\]]+)\\](?:\\[(?[^\\]]+)\\])?)?/, // timezone/calendar brackets [...]\n});\n/**\n * a {layout} is a Record of snippet-combinations describing an input DateTime argument\n * the Layout's keys are in the order that they will be checked against an input value\n */\nexport const Layout = looseIndex()({\n [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))', // calendar or event\n [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period\n [Token.dtm]: '({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?', // calendar/event and clock/period\n [Token.dmy]: '({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?', // day-month(-year)\n [Token.mdy]: '({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?', // month-day(-year)\n [Token.ymd]: '({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?', // year-month(-day)\n [Token.wkd]: '{mod}?{wkd}{afx}?{sfx}?', // special layout (no {dt}!) used for weekday calcs (only one that requires {wkd} pattern)\n [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset\n [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago)\n});\n/**\n * an {event} is a Record of regex-pattern-like-string keys that describe Date strings.\n * values can be a string or a function.\n * if assigning a function, use standard 'function()' syntax to allow for 'this' binding.\n * also, a function should always have a .toString() method which returns a parse-able Date string\n */\nexport const Event = looseIndex()({\n 'new.?years? ?eve': '31 Dec',\n 'nye': '31 Dec',\n 'new.?years?( ?day)?': '01 Jan',\n 'ny': '01 Jan',\n 'christmas ?eve': '24 Dec',\n 'christmas': '25 Dec',\n 'xmas ?eve': '24 Dec',\n 'xmas': '25 Dec',\n 'now': function () { return this.toPlainDateTime(); },\n 'today': function () { return this.toPlainDate(); },\n 'tomorrow': function () { return this.toPlainDate().add({ days: 1 }); },\n 'yesterday': function () { return this.toPlainDate().add({ days: -1 }); },\n});\n/**\n * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings.\n * values can be a string or a function.\n * if using a function, use regular 'function()' syntax to allow for 'this' binding.\n */\nexport const Period = looseIndex()({\n 'mid[ -]?night': '24:00',\n 'morning': '8:00',\n 'mid[ -]?morning': '10:00',\n 'mid[ -]?day': '12:00',\n 'noon': '12:00',\n 'after[ -]?noon': '3:00pm',\n 'evening': '18:00',\n 'night': '20:00',\n});\n/**\n * a {timeZone} alias dictionary mapping common abbreviations to IANA strings.\n * Tempo will check this registry to convert abbreviations before passing them to Temporal.\n */\nexport const TimeZone = looseIndex()({\n 'utc': 'UTC',\n 'gmt': 'Europe/London',\n 'est': 'America/New_York',\n 'cst': 'America/Chicago',\n 'mst': 'America/Denver',\n 'pst': 'America/Los_Angeles',\n 'aest': 'Australia/Sydney',\n 'acst': 'Australia/Adelaide',\n 'awst': 'Australia/Perth',\n 'nzt': 'Pacific/Auckland',\n 'cet': 'Europe/Paris',\n 'eet': 'Europe/Helsinki',\n 'ist': 'Asia/Kolkata',\n 'npt': 'Asia/Kathmandu',\n 'jst': 'Asia/Tokyo',\n});\n/** Reasonable default options for initial Tempo config */\nexport const Default = secure({\n /** log to console */ debug: false,\n /** catch or throw Errors */ catch: false,\n /** used to parse two-digit years*/ pivot: 75, /** @link https://en.wikipedia.org/wiki/Date_windowing */\n /** precision to measure timestamps (ms | us) */ timeStamp: 'ms',\n /** calendaring system */ calendar: 'iso8601',\n /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https://en.wikipedia.org/wiki/Date_format_by_country */\n /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']],\n});\n//# sourceMappingURL=tempo.default.js.map","import { asString } from '#core/shared/coercion.library.js';\nimport { extract } from '#core/shared/object.library.js';\nimport { ownEntries } from '#core/shared/reflection.library.js';\nimport { stringify } from '#core/shared/serialize.library.js';\nimport { isNumber, isDate, isTempo, isObject, isDefined, isUndefined, isFunction, nullToValue } from '#core/shared/type.library.js';\n// adapted from https://jsbin.com/insert/4/edit?js,output\n/** insert a value into an Array by its sorted position */\nexport const sortInsert = (arr = [], val, key) => {\n const obj = isObject(val) && isDefined(key); // array of Objects\n let low = 0, high = arr.length;\n while (low < high) {\n const mid = (low + high) >>> 1; // divide by 2\n const source = obj\n ? arr[mid][key] // array of Object values\n : arr[mid]; // assume Primitive values\n const target = obj\n ? val[key]\n : val;\n if (source < target)\n low = mid + 1;\n else\n high = mid;\n }\n arr.splice(low, 0, val); // mutate original Array\n return arr;\n};\n/** provide a sort-function to order a set of keys */\nexport function sortBy(...keys) {\n const sortOptions = keys // coerce string => SortBy\n .flat() // flatten Array-of-Array\n .map(key => isObject(key) ? key : { field: stringify(key) }); // build Array of sort-options\n return (left, right) => {\n let result = 0; // 0 = same, -1 = leftright\n sortOptions.forEach(key => {\n if (result === 0) { // no need to look further if result !== 0\n const dir = key.dir === 'desc' ? -1 : 1;\n const field = key.field + (key.index ? `[${key.index}]` : '');\n const valueA = extract(left, field, nullToValue(key.default, 0));\n const valueB = extract(right, field, nullToValue(key.default, 0));\n switch (true) {\n case isNumber(valueA) && isNumber(valueB):\n case isDate(valueA) && isDate(valueB):\n case isTempo(valueA) && isTempo(valueB):\n result = dir * (valueA - valueB);\n break;\n default:\n result = dir * asString(valueA)?.localeCompare(asString(valueB));\n break;\n }\n }\n });\n return result;\n };\n}\n/** return an array sorted-by a series of keys */\nexport function sortKey(array, ...keys) {\n return array.sort(sortBy(...keys));\n}\nexport function byKey(arr, fnKey, ...keys) {\n if (isFunction(fnKey))\n return Object.groupBy(arr, fnKey);\n const keyed = [fnKey] // mapFn is a keyof T\n .concat(keys) // append any trailing keyof T[]\n .flat(); // flatten Array-of-Array\n return Object.groupBy(arr, itm => // group an array into an object with named keys\n keyed\n .map(key => isUndefined(itm[key]) ? '' : stringify(itm[key]))\n .join('.'));\n}\nexport function byLkp(arr, fnKey, ...keys) {\n const group = isFunction(fnKey)\n ? byKey(arr, fnKey) // group by the callback function\n : byKey(arr, fnKey, ...keys); // group by the list of keys\n return ownEntries(group)\n .reduce((acc, [key, grp]) => Object.assign(acc, { [key]: grp?.pop() }), {});\n}\n//# sourceMappingURL=array.library.js.map","import { trimAll, toProperCase } from '#core/shared/string.library.js';\nimport { byKey, byLkp, sortKey } from '#core/shared/array.library.js';\nimport { asArray } from '#core/shared/coercion.library.js';\n// Prototype extensions\n// Remember to define any imports as a Function Declaration (not a Function Expression)\n// so that they are 'hoisted' prior to extending a prototype\n/**\n * extend an Object's prototype to include new method, if no clash\n */\nexport const patch = (proto, property, method) => {\n if (Object.hasOwn(proto.prototype, property)) { // if already defined,\n if (trimAll(method.toString()) !== trimAll(proto.prototype?.[property]?.toString()))\n console.warn(`${proto.name}.${property} already defined`); // show warning if different method definition\n }\n else {\n Object.defineProperty(proto.prototype, property, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: method,\n });\n }\n};\npatch(String, 'trimAll', function (pat) { return trimAll(this, pat); });\npatch(String, 'toProperCase', function () { return toProperCase(this); });\nfunction sorted(...keys) { return sortKey(this, ...keys); }\npatch(Array, 'orderBy', sorted); // order array by named keys\npatch(Array, 'sortBy', sorted); // sort array by named keys\nfunction keyed(...keys) { return byKey(this, ...keys); }\nfunction lookup(...keys) { return byLkp(this, ...keys); }\npatch(Array, 'keyedBy', keyed); // reduce array by named keys\npatch(Array, 'lookupBy', lookup); // reduce array by named keys, only one entry per key\npatch(Array, 'tap', function (fn) {\n fn(this); // run an arbitrary function\n return this; // then return the original array\n});\npatch(Array, 'clear', function () {\n this.fill(null).length = 0; // wipe the contents, then set the 'length' to zero\n return this;\n});\npatch(Array, 'distinct', function (mapfn) {\n return mapfn\n ? this.map(mapfn).distinct() // run the mapping selector, then recurse\n : Array.from(new Set(this)); // eliminate duplicates\n});\npatch(Array, 'cartesian', function (...args) {\n const [a, b = [], ...c] = args.length === 0 ? this : args;\n const cartFn = (a, b) => asArray([]).concat(...a.map(d => b.map(e => asArray([]).concat(d, e))));\n return b.length\n ? this.cartesian(cartFn(a, b), ...c) // run the cartFn function, then recurse\n : asArray(a || []); // return the collated result\n});\n//# sourceMappingURL=prototype.library.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport '#core/temporal.polyfill.js'; // side-effect runtime check for Temporal\n// #region library modules~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { Logify } from '#core/shared/logify.class.js';\nimport { ifDefined } from '#core/shared/object.library.js';\nimport { secure } from '#core/shared/utility.library.js';\nimport { Immutable, Serializable } from '#core/shared/class.library.js';\nimport { asArray, asNumber, asInteger, isNumeric, ifNumeric } from '#core/shared/coercion.library.js';\nimport { cleanify, stringify } from '#core/shared/serialize.library.js';\nimport { getStorage, setStorage } from '#core/shared/storage.library.js';\nimport { ownKeys, ownEntries, getAccessors, omit } from '#core/shared/reflection.library.js';\nimport { getProxy } from '#core/shared/proxy.library.js';\nimport { getContext, CONTEXT } from '#core/shared/utility.library.js';\nimport { pad, singular, toProperCase, trimAll } from '#core/shared/string.library.js';\nimport { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#core/shared/type.library.js';\nimport * as enums from '#core/tempo.config/tempo.enum.js';\nimport registerTerms from '#core/tempo.config/terms/term.import.js';\nimport { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#core/tempo.config/tempo.default.js';\nimport '#core/shared/prototype.library.js'; // patch prototypes\n// #region Const variables\n/** key to use for storage / globalThis Symbol */ export const $Tempo = Symbol.for('$Tempo');\n/** current execution context*/ const Context = getContext();\n// #endregion Const variables\n/**\n * # Tempo\n * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects.\n * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API.\n */\nlet Tempo = (() => {\n var _a, _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_conformToGroups;\n let _classDecorators = [Serializable, Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Tempo = _a = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Tempo\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Tempo = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n // #region Static enum properties~~~~~~~~~~~~~~~~~~~~~~~~~\n /** Weekday names (short-form) */ static get WEEKDAY() { return enums.WEEKDAY; }\n /** Weekday names (long-form) */ static get WEEKDAYS() { return enums.WEEKDAYS; }\n /** Month names (short-form) */ static get MONTH() { return enums.MONTH; }\n /** Month names (long-form) */ static get MONTHS() { return enums.MONTHS; }\n /** Time durations as seconds (singular) */ static get DURATION() { return enums.DURATION; }\n /** Time durations as milliseconds (plural) */ static get DURATIONS() { return enums.DURATIONS; }\n /** Quarterly Seasons */ static get SEASON() { return enums.SEASON; }\n /** Compass cardinal points */ static get COMPASS() { return enums.COMPASS; }\n /** Tempo to Temporal DateTime Units map */ static get ELEMENT() { return enums.ELEMENT; }\n /** Pre-configured format {name -> string} pairs */ static get FORMAT() { return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.formats; }\n /** some useful Dates */ static get LIMIT() { return enums.LIMIT; }\n static {\n // #endregion\n // #region Static private properties~~~~~~~~~~~~~~~~~~~~~~\n _Tempo_dbg = { value: new Logify('Tempo', {\n debug: Default?.debug ?? false,\n catch: Default?.catch ?? false\n }) };\n }\n static {\n /** Tempo state for the global configuration */ _Tempo_global = { value: {} };\n }\n static {\n /** a collection of parse rule-matches */ _Tempo_pending = { value: void 0 };\n }\n static {\n /** cache for next-available 'usr' Token key */ _Tempo_usrCount = { value: 0 };\n }\n static {\n /** mutable list of registered term plugins */ _Tempo_terms = { value: [] };\n }\n static {\n /** try to infer hemisphere using the timezone's daylight-savings setting */\n _Tempo_setSphere = { value: (shape, options) => {\n if (isUndefined(shape.config.timeZone) || __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, options, 'sphere'))\n return shape.config.sphere; // already specified or no timeZone to calculate from\n // use a fixed date (2024-01-01) to compare offsets for hemisphere detection\n const zdt = new Temporal.ZonedDateTime(BigInt(1_704_067_200) * BigInt(1_000_000_000), shape.config.timeZone);\n const jan = zdt.with({ day: 1, month: 1 }).offsetNanoseconds;\n const jun = zdt.with({ day: 1, month: 6 }).offsetNanoseconds;\n const dst = Math.sign(jan - jun); // timeZone offset difference between Jan and Jun\n switch (dst) {\n case -1:\n return Tempo.COMPASS.North; // clock moves backward in Northern hemisphere\n case 1:\n return Tempo.COMPASS.South; // clock moves forward in Southern hemisphere\n case 0:\n default:\n return void 0; // timeZone does not observe DST\n }\n } };\n }\n static {\n /** properCase week-day / calendar-month */\n _Tempo_prefix = { value: (str) => toProperCase(String(str).substring(0, 3)) };\n }\n static {\n /** get first Canonical name of a supplied locale */\n _Tempo_locale = { value: (locale) => {\n let language;\n try { // lookup locale\n language = Intl.getCanonicalLocales(locale.replace('_', '-'))[0];\n }\n catch (error) { } // catch unknown locale\n const global = Context.global;\n return language ??\n global?.navigator?.languages?.[0] ?? // fallback to current first navigator.languages[]\n global?.navigator?.language ?? // else navigator.language\n Default.locale ?? // else default locale\n locale; // cannot determine locale\n } };\n }\n // #endregion Static private methods\n // #region Static public methods~~~~~~~~~~~~~~~~~~~~~~~~~~\n /**\n * Bootstrap the library with a Custom Global Discovery object.\n *\n * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern\n * and automatically calls `Tempo.init()` to apply the discovered configuration.\n *\n * @param config - The Global Discovery object to register.\n * @returns The resolved global configuration.\n */\n static discover(config) {\n globalThis[$Tempo] = config;\n return this.init();\n }\n /**\n * Initializes the global default configuration for all subsequent `Tempo` instances.\n *\n * Settings are inherited in this priority:\n * 1. Reasonable library defaults (defined in tempo.config.js)\n * 2. Persistent storage (e.g. localStorage), if available.\n * 3. `options` provided to this method.\n *\n * @param options - Configuration overrides to apply globally.\n * @returns The resolved global configuration.\n */\n static init(options = {}) {\n if (isEmpty(options)) { // if no options supplied, reset all\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse = {\n snippet: Object.assign({}, Snippet),\n layout: Object.assign({}, Layout),\n event: Object.assign({}, Event),\n period: Object.assign({}, Period),\n mdyLocales: __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, Default.mdyLocales),\n mdyLayouts: asArray(Default.mdyLayouts),\n pivot: Default.pivot,\n };\n const { timeZone, calendar } = Intl.DateTimeFormat().resolvedOptions();\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config = Object.assign({}, omit({ ...Default }, ...enums.PARSE.keys()), // use Default as base, omit parse-related\n {\n calendar,\n timeZone,\n locale: __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_locale).call(Tempo),\n discovery: Symbol.keyFor($Tempo),\n formats: Object.create(enums.FORMAT),\n scope: 'global'\n });\n __classPrivateFieldSet(Tempo, _classThis, 0, \"f\", _Tempo_usrCount); // reset user-key counter\n for (const key of Object.keys(Token)) // purge user-allocated Tokens\n if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys\n delete Token[key];\n Tempo.addTerm(...registerTerms); // register built-in term plugins\n const storeKey = Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), $Tempo));\n }\n else {\n const discovery = options.discovery ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.discovery ?? Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), discovery), options);\n }\n if (Context.type === CONTEXT.Browser || options.debug === true)\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(Tempo.config, 'Tempo:', __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n return Tempo.config;\n }\n /** release global config and reset library to defaults */\n static [(_Tempo_proto = function _Tempo_proto(obj) { return Object.getPrototypeOf(obj); }, _Tempo_hasOwn = function _Tempo_hasOwn(obj, key) { return Object.hasOwn(obj, key); }, _Tempo_isLocal = function _Tempo_isLocal(shape) { return shape.config.scope === 'local'; }, _Tempo_create = function _Tempo_create(obj, name) { return Object.create(__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, obj)[name]); }, _Tempo_setEvents = function _Tempo_setEvents(shape) {\n const events = ownEntries(shape.parse.event, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'event') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'isMonthDay'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = events\n .map(([pat, _], idx) => `(?<${src}evt${idx}>${pat})`) // assign a number to the pattern\n .join('|'); // make an 'Or' pattern for the event-keys\n if (groups) {\n const protoEvt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.evt]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoEvt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.evt, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n if (shape.parse.isMonthDay) {\n const protoDt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.layout)[Token.dt];\n const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})';\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || localDt !== protoDt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n shape.parse.layout = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'layout');\n Object.defineProperty(shape.parse.layout, Token.dt, {\n value: localDt,\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_setPeriods = function _Tempo_setPeriods(shape) {\n const periods = ownEntries(shape.parse.period, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'period'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = periods\n .map(([pat, _], idx) => `(?<${src}per${idx}>${pat})`) // {pattern} is the 1st element of the tuple\n .join('|'); // make an 'or' pattern for the period-keys\n if (groups) {\n const protoPer = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.per]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoPer) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.per, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_isMonthDay = function _Tempo_isMonthDay(shape) {\n const monthDay = [...asArray(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.mdyLocales)];\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales'))\n monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global)\n return monthDay.some(mdy => {\n const tzs = mdy.timeZones ?? mdy.getTimeZones?.() ?? [];\n return tzs.includes(shape.config.timeZone);\n });\n }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) {\n const layouts = ownEntries(shape.parse.layout); // get entries of Layout Record\n const swap = shape.parse.mdyLayouts; // get the swap-tuple\n let chg = false; // no need to rebuild, if no change\n swap\n .forEach(([dmy, mdy]) => {\n const idx1 = layouts.findIndex(([key]) => key.description === dmy); // 1st swap element exists in {layouts}\n const idx2 = layouts.findIndex(([key]) => key.description === mdy); // 2nd swap element exists in {layouts}\n if (idx1 === -1 || idx2 === -1)\n return; // no pair to swap\n const swap1 = (idx1 < idx2) && shape.parse.isMonthDay; // we prefer {mdy} and the 1st tuple was found earlier than the 2nd\n const swap2 = (idx1 > idx2) && !shape.parse.isMonthDay; // we dont prefer {mdy} and the 1st tuple was found later than the 2nd\n if (swap1 || swap2) { // since {layouts} is an array, ok to swap by-reference\n [layouts[idx1], layouts[idx2]] = [layouts[idx2], layouts[idx1]];\n chg = true;\n }\n });\n if (chg)\n shape.parse.layout = Object.fromEntries(layouts); // rebuild Layout in new parse order\n }, _Tempo_setConfig = function _Tempo_setConfig(shape, ...options) {\n const mergedOptions = Object.assign({}, ...options);\n if (isEmpty(mergedOptions)) // nothing to do\n return;\n if (mergedOptions.store) // check for local-storage\n Object.assign(mergedOptions, { ...Tempo.readStore(mergedOptions.store), ...mergedOptions });\n /** helper to normalize snippet/layout Options into the target Config */\n const collect = (target, value, convert) => {\n const itm = asType(value);\n target ??= {};\n switch (itm.type) {\n case 'Object':\n ownEntries(itm.value)\n .forEach(([k, v]) => target[Tempo.getSymbol(k)] = convert(v));\n break;\n case 'String':\n case 'RegExp':\n target[Tempo.getSymbol()] = convert(itm.value);\n break;\n case 'Array':\n itm.value.forEach(elm => collect(target, elm, convert));\n break;\n }\n };\n ownEntries(mergedOptions)\n .forEach(([optKey, optVal]) => {\n if (isUndefined(optVal))\n return; // skip undefined values\n const arg = asType(optVal);\n switch (optKey) {\n case 'snippet':\n case 'layout':\n case 'event':\n case 'period':\n // lazy-shadowing: only create local object if it doesn't already exist on local shape\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, optKey))\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, optKey);\n const rule = shape.parse[optKey];\n if (['snippet', 'layout'].includes(optKey)) {\n collect(rule, arg.value, v => optKey === 'snippet'\n ? isRegExp(v) ? v : new RegExp(v)\n : isRegExp(v) ? v.source : v);\n }\n else {\n asArray(arg.value)\n .forEach(elm => ownEntries(elm).forEach(([key, val]) => rule[key] = val));\n }\n break;\n case 'mdyLocales':\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, arg.value);\n break;\n case 'mdyLayouts': // these are the 'layouts' that need to swap parse-order\n shape.parse[optKey] = asArray(arg.value);\n break;\n case 'pivot':\n shape.parse[\"pivot\"] = Number(arg.value);\n break;\n case 'config':\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, shape, arg.value);\n break;\n case 'timeZone':\n const zone = String(arg.value).toLowerCase();\n shape.config.timeZone = TimeZone[zone] ?? arg.value;\n break;\n case 'formats':\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.config, 'formats'))\n shape.config.formats = shape.config.formats.extend({}); // shadow parent prototype\n if (isObject(arg.value))\n shape.config.formats = shape.config.formats.extend(arg.value);\n break;\n case 'discovery':\n shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal;\n break;\n case 'plugins':\n asArray(optVal).forEach(p => this.extend(p));\n break;\n case 'anchor':\n break; // internal anchor used for relativity parsing\n default: // else just add to config\n Object.assign(shape.config, { [optKey]: optVal });\n break;\n }\n });\n const isMonthDay = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isMonthDay).call(Tempo, shape);\n if (isMonthDay !== __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local'\n shape.parse.isMonthDay = isMonthDay;\n shape.config.sphere = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_setSphere).call(Tempo, shape, mergedOptions);\n if (isDefined(shape.parse.mdyLayouts))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_swapLayout).call(Tempo, shape);\n if (isDefined(shape.parse.event))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setEvents).call(Tempo, shape);\n if (isDefined(shape.parse.period))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPeriods).call(Tempo, shape);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPatterns).call(Tempo, shape); // setup Regex DateTime patterns\n }, _Tempo_mdyLocales = function _Tempo_mdyLocales(value) {\n return asArray(value)\n .map(mdy => new Intl.Locale(mdy))\n .map(mdy => ({ locale: mdy.baseName, timeZones: mdy.getTimeZones?.() ?? [] }));\n }, _Tempo_setDiscovery = function _Tempo_setDiscovery(shape, key = shape.config.discovery ?? $Tempo) {\n const sym = isString(key) ? Symbol.for(key) : key;\n const discovery = globalThis[sym];\n if (!isObject(discovery))\n return {};\n // 1. Process TimeZones (normalize to lowercase for lookup)\n const timeZones = discovery.timeZones ?? {};\n for (const [key, value] of Object.entries(timeZones))\n TimeZone[key.toLowerCase()] = value;\n // 2. Process Terms\n if (discovery.terms)\n Tempo.addTerm(...asArray(discovery.terms));\n // 3. Process Formats\n if (discovery.formats)\n shape.config.formats = shape.config.formats.extend(discovery.formats);\n // 4. Process Plugins\n if (discovery.plugins)\n asArray(discovery.plugins).forEach(p => this.extend(p));\n // 4. Process Options\n let opts = discovery.options || {};\n return isFunction(opts) ? opts() : opts;\n }, _Tempo_setPatterns = function _Tempo_setPatterns(shape) {\n const snippet = shape.parse.snippet;\n // if local and no snippet or layout overrides, we can just use the prototype's patterns\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n return;\n // ensure we have our own Map to mutate (shadow if local)\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'pattern'))\n shape.parse.pattern = new Map();\n shape.parse.pattern.clear(); // reset {pattern} Map\n for (const [sym, layout] of ownEntries(shape.parse.layout, true))\n shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet));\n }, Symbol.dispose)]() { Tempo.init(); }\n /**\n * Extends the Tempo class with new functionality.\n * Plugins can add static or instance methods to the library.\n */\n static extend(plugin, options) {\n const p = plugin;\n if (!p.installed) {\n p(options, this, (val) => new this(val));\n p.installed = true;\n }\n return this;\n }\n /** Reads options from persistent storage (e.g., localStorage). */\n static readStore(key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return getStorage(key, {});\n }\n /** Writes configuration into persistent storage. */\n static writeStore(config, key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return setStorage(key, config);\n }\n /** lookup or registers a new `Symbol` for a given key. */\n static getSymbol(key) {\n var _b, _c;\n if (isUndefined(key)) {\n const usr = `usr.${__classPrivateFieldSet(_b = Tempo, _classThis, (_c = __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_usrCount), ++_c), \"f\", _Tempo_usrCount)}`; // allocate a prefixed 'user' key\n return Token[usr] = Symbol(usr); // add to Symbol register\n }\n if (isSymbol(key))\n return key;\n if (isString(key) && key.includes('.')) {\n const description = key.split('.').pop(); // use last segment as description\n return Token[key] ??= Symbol(description);\n }\n return Token[key] ?? Symbol.for(`$Tempo.${key}`);\n }\n /** translates {layout} into an anchored, case-insensitive RegExp. */\n static regexp(layout, snippet) {\n // helper function to replace {name} placeholders with their corresponding snippets\n function matcher(str, depth = 0) {\n if (depth > 12)\n return isRegExp(str) ? str.source : str; // depth guard\n let source = isRegExp(str) ? str.source : str;\n if (isRegExpLike(source)) // string that looks like a RegExp\n source = source.substring(1, source.length - 1); // remove the leading/trailing \"/\"\n if (source.startsWith('^') && source.endsWith('$'))\n source = source.substring(1, source.length - 1); // remove the leading/trailing anchors (^ $)\n return source.replace(Match.braces, (match, name) => {\n const token = Tempo.getSymbol(name); // get the symbol for this {name}\n const customs = snippet?.[token]?.source ?? snippet?.[name]?.source;\n const globals = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[token]?.source ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[name]?.source;\n const layout = Layout[token]; // get resolution source (layout)\n let res = customs ?? globals ?? layout; // get the snippet/layout source\n if (isNullish(res) && name.includes('.')) { // if no definition found, try fallback\n const prefix = name.split('.')[0]; // get the base token name\n const pToken = Tempo.getSymbol(prefix);\n res = snippet?.[pToken]?.source ?? snippet?.[prefix]?.source\n ?? Snippet[pToken]?.source ?? Snippet[prefix]?.source\n ?? Layout[pToken];\n }\n if (res && name.includes('.')) { // wrap dotted extensions for identification\n const safeName = name.replace(/\\./g, '_');\n if (!res.startsWith(`(?<${safeName}>`))\n res = `(?<${safeName}>${res})`;\n }\n return (isNullish(res) || res === match) // if no definition found,\n ? match // return the original match\n : matcher(res, depth + 1); // else recurse to see if snippet contains embedded \"{}\" pairs\n });\n }\n layout = matcher(layout); // initiate the layout-parse\n return new RegExp(`^(${layout})$`, 'i'); // translate the source into a regex\n }\n /** Compares two `Tempo` instances or date-time values. */\n static compare(tempo1, tempo2) {\n const one = new Tempo(tempo1), two = new Tempo(tempo2);\n return Number((one.nano > two.nano) || -(one.nano < two.nano)) + 0;\n }\n /** global Tempo configuration */\n static get config() {\n return getProxy(omit({ ...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config }, 'value'));\n }\n /** global discovery configuration */\n static get discovery() {\n const sym = Symbol.for(this.config.discovery);\n return getProxy(omit({ ...globalThis[sym], scope: 'discovery' }, 'value'));\n }\n /**\n * Returns a snapshot of the configuration layers used by Tempo.\n * Useful for debugging how the final configuration is built.\n */\n static get options() {\n const keyFor = this.config.store ?? Symbol.keyFor($Tempo);\n return {\n default: this.default,\n discovery: this.discovery,\n storage: getProxy(Object.assign({ key: keyFor, scope: 'storage' }, omit(Tempo.readStore(keyFor), 'value'))),\n global: this.config,\n };\n }\n static from(tempo, options) { return new this(tempo, options); }\n static now() { return Temporal.Now.instant().epochNanoseconds; }\n /** static Tempo.terms getter */\n static get terms() {\n return secure(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms)\n .map(({ define, ...rest }) => rest)); // omit the 'define' method\n }\n /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */\n static addTerm(...plugin) {\n asArray(plugin)\n .flat(1)\n .forEach(p => {\n if (!__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).some(t => t.key === p.key)) // check for duplicate key\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).push(p); // append; silently ignore duplicates\n });\n }\n /** static Tempo properties getter */\n static get properties() {\n return secure(getAccessors(Tempo)\n .filter(acc => getType(acc) !== 'Symbol')); // omit any Symbol properties\n }\n /** Tempo initial default settings */\n static get default() {\n return secure({ ...Default, scope: 'default', timeZone: TimeZone });\n }\n /**\n * configuration governing the static 'rules' used when parsing Tempo.DateTime argument\n */\n static get parse() {\n const parse = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse;\n return secure({\n ...parse, // spread primitives like {pivot}\n snippet: { ...parse.snippet }, // spread nested objects\n layout: { ...parse.layout },\n event: { ...parse.event },\n period: { ...parse.period },\n mdyLocales: [...parse.mdyLocales],\n mdyLayouts: [...parse.mdyLayouts],\n });\n }\n /** iterate over Tempo properties */\n static [(_Tempo_conformToGroups = function _Tempo_conformToGroups(tempo) {\n const groups = {};\n if ('year' in tempo) {\n groups.yy = tempo.year.toString().padStart(4, '0');\n groups.mm = tempo.month.toString().padStart(2, '0');\n groups.dd = tempo.day.toString().padStart(2, '0');\n }\n if ('hour' in tempo) {\n groups.hh = tempo.hour.toString().padStart(2, '0');\n groups.mi = tempo.minute.toString().padStart(2, '0');\n groups.ss = tempo.second.toString().padStart(2, '0');\n groups.ff = tempo.nanosecond.toString().padStart(9, '0');\n }\n return groups;\n }, Symbol.iterator)]() {\n return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters'\n }\n // #endregion Static public methods\n // #region Instance symbols~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** allow for auto-convert of Tempo to BigInt, Number or String */\n [Symbol.toPrimitive](hint) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.config, getType(this), '.hint: ', hint);\n switch (hint) {\n case 'string': return this.toString(); // ISO 8601 string\n case 'number': return this.epoch.ms; // Unix epoch (milliseconds)\n default: return this.nano; // Unix epoch (nanoseconds)\n }\n }\n /** iterate over instance formats */\n [Symbol.iterator]() {\n return ownEntries(this.#fmt)[Symbol.iterator](); // instance Iterator over tuple of FormatType[]\n }\n get [Symbol.toStringTag]() {\n return 'Tempo'; // hard-coded to avoid minification mangling\n }\n // #endregion Instance symbols\n // #region Instance properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** constructor tempo */ #tempo;\n /** constructor options */ #options = {};\n /** instantiation Temporal Instant */ #now;\n /** underlying Temporal ZonedDateTime */ #zdt;\n /** temporary anchor used during parsing */ #anchor;\n /** prebuilt formats, for convenience */ #fmt = {};\n /** instance term plugins */ #term = Object.create(null);\n /** instance values to complement static values */ #local = {\n /** instance configuration */ config: {},\n /** instance parse rules (only populated if provided) */ parse: { result: [] }\n };\n constructor(tempo, options = {}) {\n this.#now = Temporal.Now.instant(); // stash current Instant\n [this.#tempo, this.#options] = this.#swap(tempo, options); // swap arguments around, if arg1=Options or Temporal-like\n this.#setLocal(this.#options); // parse the local options looking for overrides to Tempo.#global.config\n // we now have all the info we need to instantiate a new Tempo\n try {\n this.#anchor = this.#options.anchor;\n this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg\n if (['iso8601', 'gregory'].includes(this.#local.config['calendar'])) {\n for (const key of this.#local.config.formats.keys())\n Object.assign(this.#fmt, { [key]: this.format(key) });\n }\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms) // add the plug-in getters for the pre-defined Terms to the instance\n .forEach(({ key, scope, define }) => {\n this.#setTerm(this, key, define, true); // add a getter which returns the key-field only\n this.#setTerm(this, scope, define, false); // add a getter which returns a range-object\n });\n if (isDefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) { // are we mutating with 'set()' ?\n this.#local.parse.result.unshift(...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending)); // prepend collected parse-matches\n __classPrivateFieldSet(Tempo, _classThis, void 0, \"f\", _Tempo_pending); // and reset mutating-flag\n }\n secure(this.#fmt); // prevent mutations\n secure(this.#term); // secure the initial object with getters\n secure(this.#local.config);\n secure(this.#local.parse);\n }\n catch (err) {\n console.error('Tempo Constructor Error:', err);\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.config, `Cannot create Tempo: ${err.message}\\n${err.stack}`);\n return {}; // return empty Object\n }\n }\n // This function has be defined within the Tempo class (and not imported from another module) because it references a private-variable\n /** this will add a getter on the instance #term private field */\n #setTerm(self, name, define, isKeyOnly) {\n if (isDefined(name) && isDefined(define)) {\n Object.defineProperty(self.#term, name, {\n configurable: false,\n enumerable: false,\n get: function () {\n const value = define.call(self, isKeyOnly); // evaluate the term range-lookup\n self.#term = secure(Object.create(self.#term, {\n [name]: {\n value,\n configurable: false,\n writable: false,\n enumerable: true\n }\n }));\n return secure(value);\n }\n });\n }\n }\n // #endregion Constructor\n // #region Instance public accessors~~~~~~~~~~~~~~~~~~~~~~\n /** 4-digit year (e.g., 2024) */ get yy() { return this.toDateTime().year; }\n /** 4-digit ISO week-numbering year */ get wy() { return this.ww === 1 && this.mm === Tempo.MONTH.Dec ? this.yy + 1 : (this.ww >= 52 && this.mm === Tempo.MONTH.Jan ? this.yy - 1 : this.yy); }\n /** Month number: Jan=1, Dec=12 */ get mm() { return this.toDateTime().month; }\n /** ISO week number of the year */ get ww() { return this.toDateTime().weekOfYear; }\n /** Day of the month (1-31) */ get dd() { return this.toDateTime().day; }\n /** Day of the month (alias for `dd`) */ get day() { return this.toDateTime().day; }\n /** Hour of the day (0-23) */ get hh() { return this.toDateTime().hour; }\n /** Minutes of the hour (0-59) */ get mi() { return this.toDateTime().minute; }\n /** Seconds of the minute (0-59) */ get ss() { return this.toDateTime().second; }\n /** Milliseconds of the second (0-999) */ get ms() { return this.toDateTime().millisecond; }\n /** Microseconds of the millisecond (0-999) */ get us() { return this.toDateTime().microsecond; }\n /** Nanoseconds of the microsecond (0-999) */ get ns() { return this.toDateTime().nanosecond; }\n /** Fractional seconds (e.g., 0.123456789) */ get ff() { return +(`0.${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`); }\n /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz() { return this.toDateTime().timeZoneId; }\n /** Unix timestamp (defaults to milliseconds) */ get ts() { return this.epoch[this.#local.config.timeStamp]; }\n /** Short month name (e.g., 'Jan') */ get mmm() { return Tempo.MONTH.keyOf(this.#zdt.month); }\n /** Full month name (e.g., 'January') */ get mon() { return Tempo.MONTHS.keyOf(this.#zdt.month); }\n /** Short weekday name (e.g., 'Mon') */ get www() { return Tempo.WEEKDAY.keyOf(this.#zdt.dayOfWeek); }\n /** Full weekday name (e.g., 'Monday') */ get wkd() { return Tempo.WEEKDAYS.keyOf(this.toDateTime().dayOfWeek); }\n /** ISO weekday number: Mon=1, Sun=7 */ get dow() { return this.toDateTime().dayOfWeek; }\n /** Nanoseconds since Unix epoch (BigInt) */ get nano() { return this.toDateTime().epochNanoseconds; }\n /** current Tempo configuration */\n get config() {\n return getProxy(omit({ ...this.#local.config }, 'scope', 'value', 'anchor'));\n }\n /** Instance-specific parse rules (merged with global) */ get parse() { return this.#local.parse; }\n /** Object containing results from all term plugins */ get term() { return getProxy(this.#term); }\n /** Formatted results for all pre-defined format codes */ get fmt() { return this.#fmt; }\n /** units since epoch */ get epoch() {\n return secure({\n /** seconds since epoch */ ss: Math.trunc(this.toDateTime().epochMilliseconds / 1_000),\n /** milliseconds since epoch */ ms: this.toDateTime().epochMilliseconds,\n /** microseconds since epoch */ us: Number(this.toDateTime().epochNanoseconds / BigInt(1_000)),\n /** nanoseconds since epoch */ ns: this.toDateTime().epochNanoseconds,\n });\n }\n // #endregion Instance public accessors\n // #region Instance private accessors\n /**\n * @Immutable class decorators wrap the class but leave internal lexical bindings pointing to the original, undecorated class.\n * To ensure new instances returned by instance methods are properly frozen,\n * we must instantiate internally from the decorated wrapper (which is bound to `this.constructor`)\n * rather than using `new Tempo(..)`.\n */\n get #Tempo() { return this.constructor; }\n /** time duration until another date-time */ until(optsOrDate, optsOrUntil) { return this.#until(optsOrDate, optsOrUntil); }\n /** time elapsed since another date-time */ since(optsOrDate, optsOrUntil) { return this.#since(optsOrDate, optsOrUntil); }\n /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt) { return this.#format(fmt); }\n /** returns a new `Tempo` with specific duration added. */ add(tempo, options) { return this.#add(tempo, options); }\n /** returns a new `Tempo` with specific offsets. */ set(tempo, options) { return this.#set(tempo, options); }\n /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config); }\n /** returns the underlying Temporal.ZonedDateTime */ toDateTime() { return this.#zdt ?? this.#anchor ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone); }\n /** returns a Temporal.PlainDate representation */ toPlainDate() { return this.toDateTime().toPlainDate(); }\n /** returns a Temporal.PlainTime representation */ toPlainTime() { return this.toDateTime().toPlainTime(); }\n /** returns a Temporal.PlainDateTime representation */ toPlainDateTime() { return this.toDateTime().toPlainDateTime(); }\n /** returns the underlying Temporal.Instant */ toInstant() { return this.toDateTime().toInstant(); }\n /** the date-time as a standard `Date` object. */ toDate() { return new Date(this.toDateTime().round({ smallestUnit: enums.ELEMENT.ms }).epochMilliseconds); }\n /** the ISO8601 string representation of the date-time. */ toString() { return this.toPlainDateTime().toString({ calendarName: 'never' }); }\n /** Custom JSON serialization for `JSON.stringify`. */ toJSON() { return omit({ ...this.#local.config, value: this.toString() }, 'scope', 'store'); }\n /** `true` if the underlying date-time is valid. */ isValid() { return !isEmpty(this); }\n // #endregion Instance public methods\n // #region Instance private methods~~~~~~~~~~~~~~~~~~~~~~~\n /** setup local 'config' and 'parse' rules (prototype-linked to global) */\n #setLocal(options) {\n // setup local config (prototype-linked to global config)\n this.#local.config = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n Object.assign(this.#local.config, { scope: 'local' });\n // setup local parse rules (prototype-linked to global parse)\n this.#local.parse = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse);\n this.#local.parse.result = [];\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, this.#local, options); // set #local config\n }\n /** parse DateTime input */\n #parse(tempo, dateTime) {\n const today = (dateTime ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone))\n .withTimeZone(this.#local.config.timeZone);\n const { type, value } = this.#conform(tempo, today, isDefined(dateTime));\n // evaluate latest timezone / calendar (after #conform which might have updated them)\n const { timeZone, calendar } = this.#local.config;\n const tz = isString(timeZone) ? timeZone : timeZone.id ?? timeZone.timeZoneId;\n const cal = isString(calendar) ? calendar : calendar.id ?? calendar.calendarId;\n if (isEmpty(this.#local.parse.result) && isUndefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) // #conform() didn't find any matches\n this.#local.parse.result = [{ type, value }];\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'parse', `{type: ${type}, value: ${value}}`); // show what we're parsing\n switch (type) {\n case 'Null':\n case 'Void':\n case 'Empty':\n case 'Undefined':\n return today;\n case 'String': // String which didn't conform to a Tempo.pattern\n try {\n const str = value.replace(/Z$/, ''); // requested Z-stripping for adoption\n const zdt = Temporal.ZonedDateTime.from(str.includes('[') ? str : `${str}[${tz}]`);\n if (this.#local)\n this.#local.config.timeZone = zdt.timeZoneId;\n return zdt;\n }\n catch (err) { // else see if Date.parse can parse value\n this.#result({ type: 'String', value }, { match: 'Date.parse' });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, 'Cannot detect DateTime; fallback to Date.parse');\n if (Match.date.test(value)) {\n try {\n return Temporal.PlainDate.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback */ }\n }\n try {\n return Temporal.PlainDateTime.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback to Date.parse */ }\n const date = new Date(value.toString());\n if (isNaN(date.getTime()))\n return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot parse Date: \"${value}\"`);\n return Temporal.ZonedDateTime // adopt instance timezone\n .from(`${date.toISOString().substring(0, 23)}[${tz}]`)\n .withCalendar(cal);\n }\n case 'Temporal.ZonedDateTime': // ZonedDateTime object: convert to instance timezone\n return (value.timeZoneId === tz && value.calendarId === cal)\n ? value\n : value.withTimeZone(tz).withCalendar(cal);\n case 'Temporal.PlainDate':\n case 'Temporal.PlainDateTime':\n return value\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainTime':\n return today.withPlainTime(value);\n case 'Temporal.PlainYearMonth': // assume current day, else end-of-month\n return value\n .toPlainDate({ day: Math.min(today.day, value.daysInMonth) })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainMonthDay': // assume current year\n return value\n .toPlainDate({ year: today.year })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.Instant':\n return value\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Tempo':\n return value\n .toDateTime()\n .withTimeZone(tz)\n .withCalendar(cal); // apply instance timezone to cloned Tempo\n case 'Date':\n return Temporal.Instant.fromEpochMilliseconds(value.getTime())\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Number': // Number which didn't conform to a Tempo.pattern\n const [seconds = BigInt(0), suffix = BigInt(0)] = value.toString().split('.').map(BigInt);\n const nano = BigInt(suffix.toString().substring(0, 9).padEnd(9, '0'));\n return Temporal.Instant.fromEpochNanoseconds(seconds * BigInt(1_000_000_000) + nano)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'BigInt': // BigInt is not conformed against a Tempo.pattern\n return Temporal.Instant.fromEpochNanoseconds(value)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected Tempo parameter type: ${type}, ${String(value)}`);\n return today;\n }\n }\n /** resolve constructor / method arguments */\n #swap(tempo, options = {}) {\n return this.#isOptions(tempo)\n ? [tempo.value, { ...tempo }]\n : [tempo, { ...options }];\n }\n /** check if we've been given a Tempo Options object */\n #isOptions(arg) {\n if (!isObject(arg) || arg.constructor !== Object)\n return false;\n const keys = ownKeys(arg); // if it contains any 'mutation' keys, then it's not (just) an options object\n if (keys.some(key => enums.MUTATION.has(key)))\n return false;\n return keys\n .some(key => enums.OPTION.has(key));\n }\n /** check if we've been given a ZonedDateTimeLike object */\n #isZonedDateTimeLike(tempo) {\n if (!isObject(tempo) || isEmpty(tempo))\n return false;\n // if it contains any 'options' keys, it's not a ZonedDateTime\n const keys = ownKeys(tempo);\n if (keys.some(key => enums.OPTION.has(key) && key !== 'value'))\n return false;\n // we include {value} to allow for Tempo instances\n return keys\n .filter(isString)\n .every((key) => enums.ZONED_DATE_TIME.has(key));\n }\n #result(...rest) {\n const match = Object.assign({}, ...rest); // collect all object arguments\n if (!isEmpty(match.groups)) {\n if (isDefined(this.#anchor) && !match.isAnchored)\n match.isAnchored = true;\n (__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending) ?? this.#local.parse.result).push(match);\n }\n }\n /** evaluate 'string | number' input against known patterns */\n #conform(tempo, dateTime, isAnchored = false) {\n const arg = asType(tempo);\n const { type, value } = arg;\n if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property)\n const { timeZone, calendar, value, ...options } = tempo;\n let zdt = !isEmpty(options)\n ? dateTime.with({ ...options })\n : dateTime;\n if (timeZone)\n zdt = zdt.withTimeZone(timeZone); // optionally set timeZone\n if (calendar)\n zdt = zdt.withCalendar(calendar); // optionally set calendar\n this.#result({ type: 'Temporal.ZonedDateTimeLike', value: zdt, match: 'Temporal.ZonedDateTimeLike' });\n return Object.assign(arg, {\n type: 'Temporal.ZonedDateTime', // override {arg.type}\n value: zdt,\n });\n }\n if (type !== 'String' && type !== 'Number') {\n this.#result(arg, { match: type });\n return arg;\n }\n if (isFunction(value)) {\n const res = value.call(this);\n return this.#conform(res, dateTime, isAnchored);\n }\n const trim = trimAll(value);\n if (type === 'String') { // if original value is String\n if (isEmpty(trim)) { // don't conform empty string\n this.#result(arg, { match: 'Empty' });\n return Object.assign(arg, { type: 'Empty' });\n }\n if (isIntegerLike(trim)) { // if string representation of BigInt literal\n this.#result(arg, { match: 'BigInt' });\n return Object.assign(arg, { type: 'BigInt', value: asInteger(trim) });\n }\n }\n else { // else it is a Number\n if (trim.length <= 7) { // cannot reliably interpret small numbers: might be {ss} or {yymmdd} or {dmmyyyy}\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, 'Cannot safely interpret number with less than 8-digits: use string instead');\n return arg;\n }\n }\n // const isSimpleIsoOrNumeric = typeof value === 'string' && (Match.date.test(value) || /^\\d+$/.test(value));\n const map = this.#local.parse.pattern;\n for (const [sym, pat] of map) {\n const groups = this.#parseMatch(pat, trim); // determine pattern-match groups\n if (isEmpty(groups))\n continue; // no match, so skip this iteration\n this.#result(arg, { match: sym.description, groups: cleanify(groups) }); // stash the {key} of the pattern that was matched\n dateTime = this.#parseZone(groups, dateTime); // resolve timezone early so events can use it\n dateTime = this.#parseGroups(groups, dateTime); // mutate the {groups} object (resolves events/periods)\n dateTime = this.#parseWeekday(groups, dateTime); // if {weekDay} pattern, calculate a calendar value\n dateTime = this.#parseDate(groups, dateTime); // if {calendar}|{event} pattern, translate to date value\n dateTime = this.#parseTime(groups, dateTime); // if {clock}|{period} pattern, translate to a time value\n /**\n * finished analyzing a matched pattern.\n * rebuild {arg.value} into a ZonedDateTime\n */\n // if no time-components were matched, strip time to midnight baseline\n if (!isAnchored && !['hh', 'mi', 'ss', 'ff', 'mer', 'per'].some(key => isDefined(groups[key])))\n dateTime = dateTime.withPlainTime('00:00:00');\n Object.assign(arg, { type: 'Temporal.ZonedDateTime', value: dateTime });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'groups', groups); // show the resolved date-time elements\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'pattern', sym.description); // show the pattern that was matched\n break; // stop checking patterns\n }\n return arg;\n }\n /** apply a regex-match against a value, and clean the result */\n #parseMatch(pat, value) {\n const groups = value.toString().match(pat)?.groups || {};\n ownEntries(groups) // remove undefined, NaN, null and empty values\n .forEach(([key, val]) => isEmpty(val) && delete groups[key]);\n return groups;\n }\n /** resolve {event} | {period} to their date | time values (mutates groups) */\n #parseGroups(groups, dateTime) {\n this.#anchor = dateTime; // temporarily anchor the instance so events resolve relative to current state\n try {\n for (const key of ownKeys(groups)) {\n const isEvent = Match.event.test(key);\n const isPeriod = Match.period.test(key);\n if (!isEvent && !isPeriod)\n continue;\n const idx = +key.substring(4);\n const src = key.startsWith('g') ? (isEvent ? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.event : __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.period) : (isEvent ? this.#local.parse.event : this.#local.parse.period);\n const entry = ownEntries(src, true)[idx];\n if (!entry)\n continue;\n const definition = entry[1];\n const res = isFunction(definition) ? definition.call(this).toString() : definition;\n const resGroups = isEvent ? this.#parseEvent(res) : this.#parsePeriod(res);\n Object.assign(groups, resGroups);\n delete groups[key];\n }\n }\n finally {\n this.#anchor = void 0; // reset anchor\n }\n // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date)\n if (isDefined(groups[\"mm\"]) && !isNumeric(groups[\"mm\"])) {\n const mm = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, groups[\"mm\"]); // conform month-name\n groups[\"mm\"] = Tempo.MONTH.keys().findIndex((el) => el === mm).toString().padStart(2, '0');\n }\n // Apply mutated groups to dateTime\n if (isDefined(groups.yy) || isDefined(groups.mm) || isDefined(groups.dd))\n dateTime = this.#parseDate(groups, dateTime);\n if (isDefined(groups.hh) || isDefined(groups.mi) || isDefined(groups.ss) || isDefined(groups.ff) || isDefined(groups.mer))\n dateTime = this.#parseTime(groups, dateTime);\n return dateTime;\n }\n /**\n * We expect similar offset-logic to apply to 'modifiers' when parsing a string DateTime.\n * returns {adjust} to make, based on {modifier}, {offset}, and {period}\n * -\t\t\tprevious period\n * +\t\t\tnext period\n * -3\t\t\tthree periods ago\n * <\t\t\tprior to base-date (asIs)\n * <=\t\t\tprior to base-date (plus one)\n */\n #parseModifier({ mod, adjust, offset, period }) {\n adjust = Math.abs(adjust);\n switch (mod) {\n case void 0: // no adjustment\n case '=':\n case 'this': // current period\n return 0;\n case '+': // next period\n case 'next':\n return adjust;\n case '-': // previous period\n case 'prev':\n case 'last':\n return -adjust;\n case '<': // period before base-date\n case 'ago':\n return (period <= offset)\n ? -adjust\n : -(adjust - 1);\n case '<=': // period before or including base-date\n return (period < offset)\n ? -adjust\n : -(adjust - 1);\n case '>': // period after base-date\n case 'hence':\n return (period > offset)\n ? adjust\n : (adjust - 1);\n case '>=': // period after or including base-date\n case '+=':\n return (period >= offset)\n ? adjust\n : (adjust - 1);\n default: // unexpected modifier\n return 0;\n }\n }\n /**\n * if named-group 'wkd' detected (with optional 'mod', 'nbr', 'sfx' or time-units), then calc relative weekday offset\n * | Example | Result | Note |\n * | :--- | :---- | :---- |\n * | `Wed` | Wed this week | might be earlier or later or equal to current day |\n * | `-Wed` | Wed last week | same as new Tempo('Wed').add({ weeks: -1 }) |\n * | `+Wed` | Wed next week | same as new Tempo('Wed').add({ weeks: 1 }) |\n * | `-3Wed` | Wed three weeks ago | same as new Tempo('Wed').add({ weeks: -3 }) |\n * | `', hh: '10', mer: 'pm'}\n * we early-exit if we find anything other than time-units\n */\n const time = ['hh', 'mi', 'ss', 'ms', 'us', 'ns', 'ff', 'mer'];\n if (!ownKeys(rest)\n .every(key => time.includes(key))) // non 'time-unit' keys detected\n return dateTime; // this is not a true {weekDay} pattern, so early-exit\n if (!isEmpty(mod) && !isEmpty(sfx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${sfx}'`);\n return dateTime; // cannot provide both 'modifier' and 'suffix'\n }\n const weekday = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, wkd); // conform weekday-name\n const adjust = +nbr; // how many weeks to adjust\n const offset = Tempo.WEEKDAY.keys() // how far weekday is from today\n .findIndex((el) => el === weekday);\n const days = offset - dateTime.dayOfWeek // number of days to offset from dateTime\n + (this.#parseModifier({ mod: mod ?? sfx, adjust, offset, period: dateTime.dayOfWeek }) * dateTime.daysInWeek);\n delete groups[\"wkd\"];\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"sfx\"];\n return dateTime\n .add({ days }); // set new {day}\n }\n /**\n * match input against date patterns\n * @returns adjusted ZonedDateTime with resolved time-components\n */\n #parseDate(groups, dateTime) {\n const { mod, nbr = '1', afx, unt, yy, mm, dd } = groups;\n if (isEmpty(yy) && isEmpty(mm) && isEmpty(dd) && isUndefined(unt))\n return dateTime; // return default\n if (!isEmpty(mod) && !isEmpty(afx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${afx}'`);\n return dateTime;\n }\n let { year, month, day } = this.#num({\n year: yy ?? dateTime.year, // supplied year, else current year\n month: mm ?? dateTime.month, // supplied month, else current month\n day: dd ?? dateTime.day, // supplied day, else current day\n });\n // handle {unt} relative offset (e.g. '2 days ago')\n if (unt) {\n const adjust = +nbr;\n const direction = (mod === '<' || mod === '-' || afx === 'ago') ? -1 : 1;\n const plural = singular(unt) + 's';\n dateTime = dateTime.add({ [plural]: adjust * direction });\n delete groups[\"unt\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n delete groups[\"mod\"];\n return dateTime;\n }\n // convert 2-digit year to 4-digits using 'pivot-year' (relative to current century)\n if (year.toString().match(Match.twoDigit)) { // if {year} match just-two digits\n const pivot = dateTime\n .subtract({ years: this.#local.parse[\"pivot\"] }) // pivot cutoff to determine century\n .year % 100; // remainder \n const century = Math.trunc(dateTime.year / 100); // current century\n year += (century - Number(year >= pivot)) * 100; // now a four-digit year\n }\n // adjust the {year} if a Modifier is present\n const adjust = +nbr; // how many years to adjust\n const offset = Number(pad(month) + '.' + pad(day)); // the event month.day\n const period = Number(pad(dateTime.month) + '.' + pad(dateTime.day + 1));\n year += this.#parseModifier({ mod: mod ?? afx, adjust, offset, period });\n Object.assign(groups, { yy: year, mm: month, dd: day });\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n // all date-components are now set; check for overflow in case past end-of-month\n return Temporal.PlainDate.from({ year, month, day }, { overflow: 'constrain' })\n .toZonedDateTime(dateTime.timeZoneId) // adjust to constrained date\n .withPlainTime(dateTime.toPlainTime()); // restore the time\n }\n /** match input against 'tm' pattern (returns adjusted ZonedDateTime) */\n #parseTime(groups = {}, dateTime) {\n if (isUndefined(groups[\"hh\"])) // must contain 'time' with at least {hh}\n return dateTime;\n let { hh = 0, mi = 0, ss = 0, ms = 0, us = 0, ns = 0 } = this.#num(groups);\n if (hh >= 24) {\n dateTime = dateTime.add({ days: Math.trunc(hh / 24) }); // move the date forward number of days to offset\t\t\t\t\t\t\t\t\n hh %= 24; // midnight is '00:00' on the next-day\n }\n if (isDefined(groups[\"ff\"])) { // {ff} is fractional seconds and overrides {ms|us|ns}\n const ff = groups[\"ff\"].substring(0, 9).padEnd(9, '0');\n ms = +ff.substring(0, 3);\n us = +ff.substring(3, 6);\n ns = +ff.substring(6, 9);\n }\n if (groups[\"mer\"]?.toLowerCase() === 'pm' && hh < 12 && (hh + mi + ss + ms + us + ns) > 0)\n hh += 12; // anything after midnight and before midday\n if (groups[\"mer\"]?.toLowerCase() === 'am' && hh >= 12)\n hh -= 12; // anything after midday\n return dateTime // return the computed time-values\n .withPlainTime({ hour: hh, minute: mi, second: ss, millisecond: ms, microsecond: us, nanosecond: ns });\n }\n /**\n * apply a timezone or calendar bracket to the current ZonedDateTime\n * normalization is applied to ensure 'Z' is treated as 'UTC'\n */\n #parseZone(groups, dateTime) {\n const tzd = groups[\"tzd\"]?.replace(Match.zed, 'UTC'); // normalize timezone/offset\n const brk = groups[\"brk\"]?.replace(Match.zed, 'UTC'); // handle bracketed timezone\n const zone = brk || tzd;\n if (zone && zone !== dateTime.timeZoneId && !zone.startsWith('u-ca=')) {\n if (this.#local)\n this.#local.config.timeZone = zone; // update local config if exists\n dateTime = dateTime.toPlainDateTime().toZonedDateTime(zone); // adopt timezone override (stable)\n }\n const cal = groups[\"cal\"];\n if (cal && cal !== dateTime.calendarId) {\n const calendar = cal.startsWith('u-ca=') ? cal.substring(5) : cal;\n this.#local.config.calendar = calendar;\n dateTime = dateTime.withCalendar(calendar);\n }\n delete groups[\"brk\"];\n delete groups[\"cal\"];\n delete groups[\"tzd\"];\n return dateTime;\n }\n /** match an {event} string against a date pattern */\n #parseEvent(evt) {\n const groups = {};\n const pats = this.#local.parse.isMonthDay // first find out if we have a US-format timeZone\n ? ['mdy', 'dmy', 'ymd'] // if so, try {mdy} before {dmy}\n : ['dmy', 'mdy', 'ymd']; // else try {dmy} before {mdy}\n for (const pat of pats) {\n const reg = this.#getPattern(pat);\n if (isDefined(reg)) {\n const match = this.#parseMatch(reg, evt);\n if (!isEmpty(match)) {\n this.#result({ type: 'Event', value: evt, match: pat, groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n if (!isEmpty(groups))\n break; // return on the first matched pattern\n }\n return groups; // overlay the match date-components\n }\n /** match a {period} string against the time pattern */\n #parsePeriod(per) {\n const groups = {};\n const tm = this.#getPattern('tm'); // get the RegExp for the time-pattern\n if (isDefined(tm)) {\n const match = this.#parseMatch(tm, per);\n if (!isEmpty(match)) {\n this.#result({ type: 'Period', value: per, match: 'tm', groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n return groups;\n }\n /** lookup the RegExp for a given pattern name */\n #getPattern(pat) {\n const reg = this.#local.parse.pattern.get(Tempo.getSymbol(pat));\n if (isUndefined(reg))\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot find pattern: \"${pat}\"`);\n return reg;\n }\n /** return a new object, with only numeric values */\n #num = (groups) => {\n return ownEntries(groups)\n .reduce((acc, [key, val]) => {\n if (isNumeric(val))\n acc[key] = asNumber(val);\n return acc;\n }, {});\n };\n /** mutate the date-time by adding a duration */\n #add = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n const mutate = 'add';\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [unit, offset]) => {\n if (unit === 'timeZone' || unit === 'calendar')\n return zdt;\n const single = singular(unit);\n const plural = single + 's';\n switch (`${mutate}.${single}`) {\n case 'add.year':\n case 'add.month':\n case 'add.week':\n case 'add.day':\n case 'add.hour':\n case 'add.minute':\n case 'add.second':\n case 'add.millisecond':\n case 'add.microsecond':\n case 'add.nanosecond':\n return zdt\n .add({ [plural]: offset });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`);\n return zdt;\n }\n }, zdt);\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n /** mutate the date-time by setting specific offsets */\n #set = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n if (args.timeZone)\n overrides.timeZone = args.timeZone;\n if (args.calendar)\n overrides.calendar = args.calendar;\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [key, adjust]) => {\n if (key === 'timeZone' || key === 'calendar')\n return zdt;\n const { mutate, offset, single } = ((key) => {\n switch (key) {\n case 'start':\n case 'mid':\n case 'end':\n return { mutate: key, offset: 0, single: singular(adjust?.toString() ?? '') };\n default:\n return { mutate: 'set', offset: adjust, single: singular(key) };\n }\n })(key); // IIFE to analyze arguments\n switch (`${mutate}.${single}`) {\n case 'set.timeZone':\n return zdt.withTimeZone(offset);\n case 'set.calendar':\n return zdt.withCalendar(offset);\n case 'set.period':\n case 'set.time':\n case 'set.date':\n case 'set.event':\n case 'set.dow': // set day-of-week by number\n case 'set.wkd': // set day-of-week by name\n return this.#parse(offset, zdt);\n case 'set.year':\n case 'set.month':\n // case 'set.week':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.day':\n case 'set.hour':\n case 'set.minute':\n case 'set.second':\n case 'set.millisecond':\n case 'set.microsecond':\n case 'set.nanosecond':\n return zdt\n .with({ [single]: offset });\n case 'set.yy':\n case 'set.mm':\n // case 'set.ww':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.dd':\n case 'set.hh':\n case 'set.mi':\n case 'set.ss':\n case 'set.ms':\n case 'set.us':\n case 'set.ns':\n const value = Tempo.ELEMENT[single];\n return zdt\n .with({ [value]: offset });\n case 'start.year':\n return zdt\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay();\n case 'start.term': // TODO\n return zdt;\n case 'start.month':\n return zdt\n .with({ day: 1 })\n .startOfDay();\n case 'start.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) })\n .startOfDay();\n case 'start.day':\n return zdt\n .startOfDay();\n case 'start.hour':\n case 'start.minute':\n case 'start.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'trunc' });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'mid.year':\n return zdt\n .with({ month: Tempo.MONTH.Jul, day: 1 })\n .startOfDay();\n case 'mid.term': // TODO: relevant?\n return zdt;\n case 'mid.month':\n return zdt\n .with({ day: Math.trunc(zdt.daysInMonth / 2) })\n .startOfDay();\n case 'mid.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) })\n .startOfDay();\n case 'mid.day':\n return zdt\n .round({ smallestUnit: 'day', roundingMode: 'trunc' })\n .add({ hours: 12 });\n case 'mid.hour':\n return zdt\n .round({ smallestUnit: 'hour', roundingMode: 'trunc' })\n .add({ minutes: 30 });\n case 'mid.minute':\n return zdt\n .round({ smallestUnit: 'minute', roundingMode: 'trunc' })\n .add({ seconds: 30 });\n case 'mid.second':\n return zdt\n .round({ smallestUnit: 'second', roundingMode: 'trunc' })\n .add({ milliseconds: 500 });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'end.year':\n return zdt\n .add({ years: 1 })\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.term': // TODO\n return zdt\n .subtract({ nanoseconds: 1 });\n case 'end.month':\n return zdt\n .add({ months: 1 })\n .with({ day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.week':\n return zdt\n .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.day':\n case 'end.hour':\n case 'end.minute':\n case 'end.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'ceil' })\n .subtract({ nanoseconds: 1 });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`);\n return zdt;\n }\n }, zdt); // start reduce with the shifted zonedDateTime\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n #format = (fmt) => {\n if (isNull(this.#tempo))\n return undefined; // don't format dates\n const obj = this.#local.config.formats;\n let template = (isString(fmt) && obj.has(fmt))\n ? obj[fmt]\n : String(fmt);\n // auto-meridiem: if {HH} is present and {mer} is absent, append it after the last time component\n if (template.includes('{HH}') && !template.includes('{mer}') && !template.includes('{MER}')) {\n const index = Math.max(template.lastIndexOf('{HH}'), template.lastIndexOf('{mi}'), template.lastIndexOf('{ss}'));\n if (index !== -1) {\n const end = template.indexOf('}', index) + 1;\n template = template.slice(0, end) + '{mer}' + template.slice(end);\n }\n }\n const result = template.replace(Match.braces, (_match, token) => {\n switch (token) {\n case 'wy': return pad(this.wy, 4);\n case 'yyww': return pad(this.wy, 4) + pad(this.ww);\n case 'yyyy': return pad(this.yy, 4);\n case 'yy': return pad(this.yy % 100);\n case 'mon': return this.mon;\n case 'mmm': return this.mmm;\n case 'mm': return pad(this.mm);\n case 'dd': return pad(this.dd);\n case 'day': return this.day.toString();\n case 'dow': return this.dow.toString();\n case 'wkd': return this.wkd;\n case 'www': return this.www;\n case 'ww': return pad(this.ww);\n case 'hh': return pad(this.hh);\n case 'HH': return pad(this.hh > 12 ? this.hh % 12 : this.hh || 12);\n case 'mer': return this.hh >= 12 ? 'pm' : 'am';\n case 'MER': return this.hh >= 12 ? 'PM' : 'AM';\n case 'mi': return pad(this.mi);\n case 'ss': return pad(this.ss);\n case 'ms': return pad(this.ms, 3);\n case 'us': return pad(this.us, 3);\n case 'ns': return pad(this.ns, 3);\n case 'ff': return `${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`;\n case 'hhmiss': return `${pad(this.hh)}${pad(this.mi)}${pad(this.ss)}`;\n case 'ts': return this.ts.toString();\n case 'nano': return this.nano.toString();\n case 'tz': return this.tz;\n default: {\n return token.startsWith('term.')\n ? stringify(this.term[token.slice(5)])\n : `{${token}}`; // unknown format-code, return as-is\n }\n }\n });\n const isExplicitlyNumeric = ['{yyyy}{ww}', '{yyyy}{mm}', '{yyyy}{mm}{dd}', '{yyww}', '{wy}{ww}', '{wy}'].includes(template);\n return (isExplicitlyNumeric ? ifNumeric(result) : result);\n };\n #until(arg, until = {}, since = false) {\n let value, opts = {}, unit;\n switch (true) {\n case isString(arg) && Tempo.ELEMENT.includes(singular(arg)):\n unit = arg; // e.g. tempo.until('hours')\n ({ value, ...opts } = until);\n break;\n case isString(arg): // assume 'arg' is a dateTime string\n value = arg; // e.g. tempo.until('20-May-1957', {unit: 'years'})\n if (isObject(until))\n ({ unit, ...opts } = until);\n else\n unit = until; // assume the 'until' arg is a 'unit' string\n break;\n case isObject(arg) && isString(until): // assume 'until' is a Unit\n unit = until; // e.g. tempo.until({value:'20-May-1957}, 'years'})\n ({ value, ...opts } = arg);\n break;\n case isObject(arg) && isObject(until): // assume combination of Tempo.Options and Tempo.Until\n ({ value, unit, ...opts } = Object.assign({}, arg, until));\n break;\n case isString(until):\n unit = until;\n value = arg;\n break;\n case isObject(until):\n unit = until.unit;\n value = arg;\n break;\n default:\n value = arg; // assume 'arg' is a DateTime\n }\n const offset = new this.#Tempo(value, opts); // create the offset Tempo\n const diffZone = this.#zdt.timeZoneId !== offset.#zdt.timeZoneId;\n // Temporal restricts cross-timezone math to absolute units ('hours') to avoid DST ambiguity\n const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') });\n if (isDefined(unit))\n unit = `${singular(unit)}s`; // coerce to plural\n return (isUndefined(unit) || since) // if no 'unit' provided, or if called via #since()\n ? getAccessors(duration) // return an Object with all the duration accessors\n .reduce((acc, dur) => Object.assign(acc, { [dur]: duration[dur] }), ifDefined({ iso: duration.toString(), unit }))\n : duration.total({ relativeTo: this.#zdt, unit }); // sum-up the duration components\n }\n /** format the elapsed time between two Tempos (to nanosecond) */\n #since(arg, until = {}) {\n const dur = this.#until(arg, until, true); // get a Tempo.Duration object\n const date = [dur.years, dur.months, dur.days];\n const time = [dur.hours, dur.minutes, dur.seconds];\n const fraction = [dur.milliseconds, dur.microseconds, dur.nanoseconds]\n .map(Math.abs)\n .map(nbr => nbr.toString().padStart(3, '0'))\n .join('');\n const rtf = new Intl.RelativeTimeFormat(this.#local.config['locale'], { style: 'narrow' });\n switch (dur.unit) {\n case 'years':\n return rtf.format(date[0], 'years');\n case 'months':\n return rtf.format(date[1], 'months');\n case 'weeks':\n return rtf.format(date[1], 'weeks');\n case 'days':\n return rtf.format(date[2], 'days');\n case 'hours':\n return rtf.format(time[0], 'hours');\n case 'minutes':\n return rtf.format(time[1], 'minutes');\n case 'seconds':\n return rtf.format(time[2], 'seconds');\n case 'milliseconds':\n case 'microseconds':\n case 'nanoseconds':\n return `${fraction}`;\n default:\n return dur.iso;\n }\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Tempo = _classThis;\n})();\nexport { Tempo };\n// #endregion Namespace\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nTempo.init(); // initialize default global configuration\n// shortcut functions to common Tempo properties / methods\n/** check valid Tempo */ export const isTempo = (tempo) => isType(tempo, 'Tempo');\n/** current timestamp (ts) */ export const getStamp = ((tempo, options) => new Tempo(tempo, options).ts);\n/** create new Tempo */ export const getTempo = ((tempo, options) => new Tempo(tempo, options));\n/** format a Tempo */ export const fmtTempo = ((fmt, tempo, options) => new Tempo(tempo, options).format(fmt));\n//# sourceMappingURL=tempo.class.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport { Logify } from '#core/shared/logify.class.js';\nimport { asArray } from '#core/shared/coercion.library.js';\nimport { sprintf } from '#core/shared/string.library.js';\nimport { ifDefined } from '#core/shared/object.library.js';\nimport { secure } from '#core/shared/utility.library.js';\nimport { cleanify } from '#core/shared/serialize.library.js';\nimport { Immutable } from '#core/shared/class.library.js';\nimport { isEmpty, isObject } from '#core/shared/type.library.js';\n/**\n * Wrap a Promise's resolve/reject/finally methods for later fulfilment.\n * with useful methods for tracking the state of the Promise, chaining fulfilment, etc.\n ```\n new Pledge({tag: string, onResolve?: () => void, onReject?: () => void, onSettle?: () => void})\n new Pledge(tag?: string)\n ```\n */\nlet Pledge = (() => {\n var _Pledge_static;\n let _classDecorators = [Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Pledge = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Pledge\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Pledge = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n #pledge;\n #status = {};\n #dbg;\n static {\n _Pledge_static = { value: {} };\n }\n static STATE = secure({\n Pending: Symbol('pending'),\n Resolved: Symbol('resolved'),\n Rejected: Symbol('rejected')\n });\n /** initialize future Pledge instances */\n static init(arg) {\n if (isObject(arg)) {\n if (isEmpty(arg))\n __classPrivateFieldSet(Pledge, _classThis, {}, \"f\", _Pledge_static); // reset static values\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }), ifDefined({ onResolve: arg.onResolve, onReject: arg.onReject, onSettle: arg.onSettle, }));\n }\n else {\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg, }));\n }\n if (__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug)\n console.log('Pledge: ', __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static)); // debug\n return Pledge.status;\n }\n /** reset static defaults */\n static [Symbol.dispose]() { Pledge.init({}); }\n static get status() {\n return __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static);\n }\n /** use catch:boolean to determine whether to throw or return */\n #catch(...msg) {\n if (this.status.catch) {\n this.#dbg.warn(...msg); // catch, but warn {error}\n return;\n }\n this.#dbg.error(...msg); // assume {error}\n throw new Error(sprintf('pledge: ', ...msg));\n }\n constructor(arg) {\n this.#pledge = Promise.withResolvers();\n this.#status = { state: Pledge.STATE.Pending, ...__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static) };\n if (isObject(arg)) {\n this.#dbg = new Logify({ debug: arg.debug, catch: arg.catch });\n Object.assign(this.#status, ifDefined({ tag: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, debug: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug, catch: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).catch }), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }));\n const onResolve = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onResolve).concat(asArray(arg.onResolve));\n const onReject = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onReject).concat(asArray(arg.onReject));\n const onSettle = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onSettle).concat(asArray(arg.onSettle));\n if (onResolve.length)\n this.#pledge.promise.then(val => onResolve.forEach(cb => cb(val)));\n if (onReject.length)\n this.#pledge.promise.catch(err => onReject.forEach(cb => cb(err)));\n if (onSettle.length)\n this.#pledge.promise.finally(() => onSettle.forEach(cb => cb()));\n if (this.#status.catch)\n this.#pledge.promise.catch(err => this.#catch(this.#status, err));\n }\n else {\n this.#dbg = new Logify();\n Object.assign(this.#status, ifDefined({ tag: arg ?? __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, }));\n }\n this.#pledge.promise.catch(() => { }); // global catch-all to prevent unhandled rejections\n Object.freeze(this); // make this instance immutable\n }\n get [Symbol.toStringTag]() {\n return 'Pledge';\n }\n [Symbol.dispose]() {\n if (this.isPending)\n this.reject(new Error(`Pledge disposed`)); // discard pending Pledge (to notify wait-ers)\n }\n get status() {\n return cleanify(this.#status);\n }\n get promise() {\n return this.#pledge.promise;\n }\n get state() {\n return this.#status.state.description;\n }\n get isPending() {\n return this.#status.state === Pledge.STATE.Pending;\n }\n get isResolved() {\n return this.#status.state === Pledge.STATE.Resolved;\n }\n get isRejected() {\n return this.#status.state === Pledge.STATE.Rejected;\n }\n get isSettled() {\n return this.#status.state !== Pledge.STATE.Pending;\n }\n toString() {\n return JSON.stringify(this.status);\n }\n resolve(value) {\n if (this.isPending) {\n this.#status.settled = value;\n this.#status.state = Pledge.STATE.Resolved;\n this.#pledge.resolve(value); // resolve, then trigger any Pledge.onResolve, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n reject(error) {\n if (this.isPending) {\n this.#status.error = error;\n this.#status.state = Pledge.STATE.Rejected;\n this.#pledge.reject(error); // reject, then trigger any Pledge.onReject, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n then(fn) {\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Pledge = _classThis;\n})();\nexport { Pledge };\n//# sourceMappingURL=pledge.class.js.map"],"names":["isTempo","ranges","key","scope","description","define","qtr.key","qtr.scope","qtr.description","qtr.define","szn.key","szn.scope","szn.description","szn.define","zdc.key","zdc.scope","zdc.description","zdc.define","per.key","per.scope","per.description","per.define","enums.WEEKDAY","enums.WEEKDAYS","enums.MONTH","enums.MONTHS","enums.DURATION","enums.DURATIONS","enums.SEASON","enums.COMPASS","enums.ELEMENT","enums.LIMIT","enums.PARSE","enums.FORMAT","enums.MUTATION","enums.OPTION","enums.ZONED_DATE_TIME"],"mappings":"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","x_google_ignoreList":[1]} \ No newline at end of file +{"version":3,"file":"tempo.bundle.js","sources":["temporal.polyfill.js","../../../node_modules/tslib/tslib.es6.mjs","../../library/dist/type.library.js","../../library/dist/reflection.library.js","../../library/dist/utility.library.js","../../library/dist/function.library.js","../../library/dist/serialize.library.js","../../library/dist/class.library.js","../../library/dist/logify.class.js","../../library/dist/object.library.js","../../library/dist/coercion.library.js","../../library/dist/storage.library.js","../../library/dist/proxy.library.js","../../library/dist/string.library.js","../../library/dist/enumerate.library.js","tempo.config/tempo.enum.js","tempo.config/terms/term.utils.js","tempo.config/terms/term.quarter.js","tempo.config/terms/term.season.js","tempo.config/terms/term.zodiac.js","tempo.config/terms/term.timeline.js","tempo.config/terms/term.import.js","tempo.config/tempo.default.js","../../library/dist/array.library.js","../../library/dist/prototype.library.js","tempo.class.js","../../library/dist/pledge.class.js"],"sourcesContent":["/**\n * This file verifies native Temporal API support.\n * Tempo requires an environment with native Temporal support or a user-provided polyfill.\n */\n// @ts-ignore\nif (!globalThis.Temporal) {\n const message = `\n[Tempo] Temporal API not found.\nThis library requires the ECMAScript Temporal API. Please ensure your environment \nsupports it natively (Node.js 20+, modern browsers) or provide your own polyfill.\n\nTo add a polyfill to your project:\n1. Install: npm install @js-temporal/polyfill\n2. Import at your entry point: import '@js-temporal/polyfill';\n`;\n console.error(message);\n throw new Error('Temporal API not found.');\n}\nexport {};\n//# sourceMappingURL=temporal.polyfill.js.map","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","/** the primitive type reported by toStringTag() */\nconst protoType = (obj) => Object.prototype.toString.call(obj).slice(8, -1);\n/**\n * return an object's type as a ProperCase string.\n * if instance, return Class name\n */\nexport const getType = (obj, ...instances) => {\n const type = protoType(obj);\n switch (true) {\n case type === 'Object':\n const name = isArrayLike(obj)\n ? 'ArrayLike' // special case Object: ArrayLike\n : obj.constructor?.name ?? 'Object'; // some Objects do not have a constructor method\n return (instances\n .find(inst => obj instanceof inst.class)?.type // allow for 'real' name of Instance, after minification\n ?? name); // return Object name\n case type === 'Function' && Function.prototype.toString.call(obj).startsWith('class '):\n return 'Class';\n default:\n return type;\n }\n};\n/** return TypeValue object */\nexport const asType = (value, ...instances) => ({ type: getType(value, ...instances), value });\n/** assert value is one of a list of Types */\nexport const isType = (obj, ...types) => types.includes(getType(obj));\n/** Type-Guards: assert \\ is of \\ */\nexport const isPrimitive = (obj) => isType(obj, 'String', 'Number', 'BigInt', 'Boolean', 'Symbol', 'Undefined', 'Void', 'Null', 'Empty');\nexport const isReference = (obj) => !isPrimitive(obj);\nexport const isIterable = (obj) => Symbol.iterator in Object(obj) && !isString(obj);\nexport const isString = (obj) => isType(obj, 'String');\nexport const isNumber = (obj) => isType(obj, 'Number') && isFinite(obj);\nexport const isInteger = (obj) => isType(obj, 'BigInt');\nexport const isIntegerLike = (obj) => isType(obj, 'String') && /^-?[0-9]+n$/.test(obj);\nexport const isDigit = (obj) => isType(obj, 'Number', 'BigInt');\nexport const isBoolean = (obj) => isType(obj, 'Boolean');\nexport const isArray = (obj) => isType(obj, 'Array');\nexport const isArrayLike = (obj) => protoType(obj) === 'Object' && 'length' in obj && Object.keys(obj).every(key => key === 'length' || !isNaN(Number(key)));\nexport const isObject = (obj) => isType(obj, 'Object');\nexport const isDate = (obj) => isType(obj, 'Date');\nexport const isRegExp = (obj) => isType(obj, 'RegExp');\nexport const isRegExpLike = (obj) => isType(obj, 'String') && /^\\/.*\\/$/.test(obj);\nexport const isSymbol = (obj) => isType(obj, 'Symbol');\nexport const isSymbolFor = (obj) => isType(obj, 'Symbol') && Symbol.keyFor(obj) !== undefined;\nexport const isPropertyKey = (obj) => isType(obj, 'String', 'Number', 'Symbol');\nexport const isNull = (obj) => isType(obj, 'Null');\nexport const isNullish = (obj) => isType(obj, 'Null', 'Undefined', 'Void', 'Empty');\nexport const isUndefined = (obj) => isType(obj, 'Undefined', 'Void', 'Empty');\nexport const isDefined = (obj) => !isNullish(obj);\nexport const isClass = (obj) => isType(obj, 'Class');\nexport const isFunction = (obj) => isType(obj, 'Function', 'AsyncFunction');\nexport const isPromise = (obj) => isType(obj, 'Promise');\nexport const isMap = (obj) => isType(obj, 'Map');\nexport const isSet = (obj) => isType(obj, 'Set');\nexport const isError = (err) => isType(err, 'Error');\nexport const isTemporal = (obj) => protoType(obj).startsWith('Temporal.');\n// non-standard Objects\nexport const isTempo = (obj) => isType(obj, 'Tempo');\nexport const isEnum = (obj) => isType(obj, 'Enumify');\nexport const isPledge = (obj) => isType(obj, 'Pledge');\nexport const nullToZero = (obj) => obj ?? 0;\nexport const nullToEmpty = (obj) => obj ?? '';\nexport const nullToValue = (obj, value) => obj ?? value;\n/** object has no values */\nexport const isEmpty = (obj) => false\n || isNullish(obj)\n || (isObject(obj) && (Reflect.ownKeys(obj).length === 0))\n || (isString(obj) && (obj.trim().length === 0))\n || (isNumber(obj) && (isNaN(obj) === true))\n || (isArray(obj) && (obj.length === 0))\n || (isSet(obj) && (obj.size === 0))\n || (isMap(obj) && (obj.size === 0));\nexport function assertCondition(condition, message) {\n if (!condition)\n throw new Error(message);\n}\nexport function assertString(str) { assertCondition(isString(str), `Invalid string: ${str}`); }\n;\nexport function assertNever(val) { throw new Error(`Unexpected object: ${val}`); }\n;\n//# sourceMappingURL=type.library.js.map","import { asType, getType, isEmpty, isFunction, isPrimitive } from '#library/type.library.js';\n/** property marker used to unwrap proxies in ownEntries() */\nexport const $Target = Symbol.for('$Target');\n/** mutate Object | Array by excluding values with specified primitive 'types' */\nexport function exclude(obj, ...types) {\n const exclusions = types\n .map(item => item.toLowerCase()) // cast Primitives as Lowercase to aid in matching\n .distinct();\n if (obj && typeof obj === 'object') { // only works on Objects and Arrays\n const keys = [];\n ownEntries(obj)\n .forEach(([key, value]) => {\n const type = getType(value);\n if (['Object', 'Array'].includes(type)) // recurse into object\n exclude(value, ...exclusions);\n if (isPrimitive(value) && exclusions.includes(type.toLowerCase()))\n keys.push(key);\n });\n if (!isEmpty(keys)) // if any values to be excluded\n omit(obj, ...keys);\n }\n return obj; // return Object reference, even though Object has been mutated\n}\nexport function omit(obj, ...keys) {\n const { type, value } = asType(obj);\n switch (type) {\n case 'Array':\n if (isEmpty(keys)) {\n value.clear(); // clear entire Array\n break;\n }\n keys\n .sort()\n .reverse() // remove from end-to-start to preserve indexes\n .forEach(key => value.splice(Number(key), 1)); // remove Array index\n break;\n case 'Object':\n (isEmpty(keys) ? ownKeys(value) : keys) // if no {keys}, assume all ownKeys\n .forEach(key => Reflect.deleteProperty(value, key));\n }\n return value; // return Object reference, even though Object has been mutated\n}\n/** remove all ownKeys from an Object | Array */\nexport function purge(obj) {\n return omit(obj);\n}\n/** reset Object */\nexport function reset(orig, obj) {\n return Object.assign(purge(orig), { ...obj });\n}\n// These functions are to preserve the typescript 'type' of an object's keys & values\n// and will include both string and symbol keys\n/** array of all enumerable PropertyKeys */\nexport function ownKeys(json) {\n return ownEntries(json).map(([key]) => key);\n}\n/** array of all enumerable object values */\nexport function ownValues(json) {\n return ownEntries(json).map(([_, value]) => value);\n}\n/** tuple of enumerable entries with string | symbol keys */\nexport function ownEntries(json, all = false) {\n if (!json || typeof json !== 'object')\n return [];\n const getOwn = (obj) => {\n const tgt = obj[$Target] ?? obj; // unwrap if it's a proxy\n return Reflect.ownKeys(tgt)\n .filter(key => Object.getOwnPropertyDescriptor(tgt, key)?.enumerable)\n .map(key => [key, tgt[key]]);\n };\n if (!all)\n return getOwn(json);\n // all=true: collect per-level bottom-up, reverse to top-down, dedup via Map\n // Map preserves first-insertion position but allows value update (own key shadows ancestor)\n const levels = [];\n const limit = 50; // prevent infinite loops (increased from 10)\n let depth = 0;\n let proto = json;\n do {\n const t = proto[$Target] ?? proto; // CRITICAL: unwrap before checking marker to avoid trap recursion\n const lvl = getOwn(proto);\n if (lvl.length)\n levels.push(lvl);\n proto = Object.getPrototypeOf(t);\n } while (proto && proto !== Object.prototype && ++depth < limit);\n return [...new Map(levels.reverse().flat()).entries()];\n}\n/** return an Object containing all 'own' and 'inherited' enumerable properties */\nexport function allObject(json) {\n return Object.fromEntries(ownEntries(json, true));\n}\n/** get a string-array of 'getter' names for an object */\nexport const getAccessors = (obj = {}) => {\n return ownAccessors(obj, 'get');\n};\n/** get a string-array of 'setter' names for an object */\nexport const setAccessors = (obj = {}) => {\n return ownAccessors(obj, 'set');\n};\nconst ownAccessors = (obj = {}, type) => {\n const accessors = Object.getOwnPropertyDescriptors(obj.prototype || Object.getPrototypeOf(obj));\n return ownEntries(accessors)\n .filter(([_, descriptor]) => isFunction(descriptor[type]))\n .map(([key, _]) => key);\n};\n/** copy all Own properties (including getters / setters) to a new object */\nexport const copyObject = (target, source) => {\n return Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n};\n//# sourceMappingURL=reflection.library.js.map","import { ownValues } from '#library/reflection.library.js';\nimport { isDefined, isReference } from '#library/type.library.js';\n/** General utility functions */\n/** analyze the Call Stack to determine calling Function's name */\nexport const getCaller = () => {\n const stackTrace = new Error().stack // only tested in latest FF and Chrome\n ?.split('\\n')\n ?.map(itm => itm.trim())\n ?.filter(itm => !itm.startsWith('Error'))\n ?? [];\n const callerName = stackTrace[2].split(' ');\n return (callerName[1] === 'new') ? callerName[2] : callerName[1].split('.')[0];\n};\n/** analyze the Call Stack to determine calling Function's name */\nexport const getScript = (nbr = 1) => {\n const stackTrace = new Error().stack\n ?.match(/([^ \\n\\(@])*([a-z]*:\\/\\/\\/?)*?[a-z0-9\\/\\\\]*\\.js/ig)?.[nbr];\n return decodeURI(stackTrace ?? ''); // decodeURI is needed to handle spaces in file-names\n};\n/**\n * introduce a wait-timer that will Error() on timeOut.\n * best used with Promise.race([xxx(), sleep()]\n * @param msg\t\t\tstring to display on a timeout\n * @param timeOut\thow many milliseconds to sleep (default 2-seconds)\n * @returns\t\t\t\tPromise\\\n */\nexport const sleep = (msg = 'sleep: timed out', timeOut = 2000) => new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), timeOut));\n/** Javascript Runtimes */\nexport const CONTEXT = {\n 'Unknown': 'unknown',\n 'Browser': 'browser',\n 'NodeJS': 'nodejs',\n 'Deno': 'deno',\n 'GoogleAppsScript': 'google-apps-script',\n};\n/** determine JavaScript environment context */\nexport const getContext = () => {\n const global = globalThis;\n if (isDefined(global.SpreadsheetApp))\n return { global, type: CONTEXT.GoogleAppsScript };\n if (isDefined(global.window?.document))\n return { global, type: CONTEXT.Browser };\n if (isDefined(global.process?.versions?.node))\n return { global, type: CONTEXT.NodeJS };\n return { global, type: CONTEXT.Unknown };\n};\n// useful for those times when a full Enumify object is not needed, but still lock the Object from mutations\n/** deep-freeze an Array | Object to make it immutable */\nexport function secure(obj) {\n if (isReference(obj)) // skip primitive values\n ownValues(obj) // retrieve the properties on obj\n .forEach(val => Object.isFrozen(val) || secure(val)); // secure each value, if not already Frozen\n return Object.freeze(obj); // freeze the object itself\n}\n//# sourceMappingURL=utility.library.js.map","import { secure } from '#library/utility.library.js';\nimport { isUndefined } from '#library/type.library.js';\n/** curry a Function to allow partial calls */\nexport function curry(fn) {\n return function curried(...args) {\n return (args.length >= fn.length)\n ? fn(...args)\n : (...nextArgs) => curried(...args, ...nextArgs);\n };\n}\n/** generic function to memoize repeated function calls */\nexport function memoizeFunction(fn) {\n const cache = new Map(); // using a Map for better key handling than plain objects\n return function (...args) {\n const key = JSON.stringify(args); // create a unique key from arguments\n console.log('memoize: ', key);\n if (!cache.has(key)) {\n // @ts-ignore\n const result = fn.apply(this, args); // call the original function with the correct context\n console.log('set: ', result);\n cache.set(key, Object.freeze(result)); // stash the result for subsequent calls\n }\n else\n console.log('get: ', cache.get(key));\n return cache.get(key);\n };\n}\nconst wm = new WeakMap();\n/** manually clear the memoization cache for an object */\nexport function clearCache(obj) {\n wm.delete(obj);\n}\n/** define a Descriptor for an Object's memoized-method */\nexport function memoizeMethod(name, fn) {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n value: function (...args) {\n const key = `${String(name)},${JSON.stringify(args)}`;\n let cache = wm.get(this);\n if (!cache) { // add a new object into the WeakMap\n cache = Object.create(null);\n wm.set(this, cache);\n }\n if (isUndefined(cache[key])) { // first time for this method\n cache[key] = fn.apply(this, args); // evaluate the method\n secure(cache[key]); // freeze the returned value\n }\n return cache[key];\n }\n };\n}\n//# sourceMappingURL=function.library.js.map","import { curry } from '#library/function.library.js';\nimport { ownKeys, ownValues, ownEntries } from '#library/reflection.library.js';\nimport { isType, asType, isEmpty, isDefined, isUndefined, isNullish, isString, isObject, isArray, isFunction, isSymbolFor, isSymbol } from '#library/type.library.js';\n/** registry of registered classes */\n// DO NOT EDIT THIS VALUE: used by decorator.library.ts\nexport const Registry = new Map();\n// be aware that 'structuredClone' preserves \\ values... \n// and JSON.stringify() does not\n/** make a deep-copy, using standard browser or JSON functions */\nexport function clone(obj, opts) {\n try {\n return globalThis.structuredClone(obj, opts);\n }\n catch {\n return cleanify(obj); // fallback to JSON functions\n }\n}\n/** return a copy. remove unsupported values (e.g. \\, function) */\nexport function cleanify(obj) {\n try {\n return JSON.parse(JSON.stringify(obj)); // run any toString() methods\n }\n catch (error) {\n console.warn('Could not clean object: ', obj);\n return { ...obj };\n }\n}\n/** deep-copy an Object, and optionally replace \\ fields with a Sentinel function call\t*/\nexport function cloneify(obj, sentinel) {\n try {\n return objectify(stringify(obj), sentinel);\n }\n catch (error) {\n console.warn('Could not cloneify object: ', obj);\n console.warn('stack: ', error.stack);\n return obj;\n }\n}\nfunction replacer(key, obj) { return isEmpty(key) ? obj : stringize(obj); }\nfunction reviver(_key, val) { return decode(val); }\n// safe-characters [sp \" ; < > [ ] ^ { | }]\nconst safeList = ['20', '22', '3B', '3C', '3E', '5B', '5D', '5E', '7B', '7C', '7D'];\n/** encode control characters, then replace a safe-subset back to text-string */\nfunction encode(val) {\n let enc = encodeURI(val);\n if (enc.includes('%')) { // if an encoded URI might be in string\n safeList.forEach(code => {\n const uri = '%' + code;\n const reg = new RegExp(uri, 'g');\n enc = enc.replace(reg, decodeURI(uri));\n });\n }\n return enc;\n}\n/** decode control characters */\nfunction decode(val) {\n if (isString(val)) {\n try {\n return decodeURI(val); // might fail if badly encoded '%'\n }\n catch (error) {\n // console.warn(`decodeURI: ${(error as Error).message} -> ${val}`);\n }\n }\n return val; // return original value\n}\n/** check type can be stringify'd */\nfunction isStringable(val) {\n return !isType(val, 'Function', 'AsyncFunction', 'WeakMap', 'WeakSet', 'WeakRef');\n}\n/** string representation of a single key:value Object */\nfunction oneKey(type, value) {\n return `{\"$${type}\":${value}}`;\n}\n/** Symbols in an Object-key will need special treatment */\nfunction fromSymbol(key) {\n return stringize(isSymbol(key) // @@(name) for global, @(name) for local symbols\n ? `${isSymbolFor(key) ? '@' : ''}@(${key.description ?? ''})`\n : key);\n}\nconst symKey = /^@(@)?\\(([^\\)]*)\\)$/; // pattern to match a stringify'd Symbol\n/** reconstruct a Symbol from a string-representation of a key */\nfunction toSymbol(value) {\n const [pat, keyFor, desc] = value.toString().match(symKey) || [null, undefined, undefined];\n switch (true) {\n case isSymbol(value): // already a Symbol\n case isNullish(pat): // incorrectly encoded Symbol\n case isDefined(keyFor) && isUndefined(desc): // incorrectly encoded global Symbol\n return value;\n case isDefined(keyFor): // global Symbol\n return Symbol.for(desc);\n case isUndefined(keyFor): // local Symbol\n default:\n return Symbol(desc);\n }\n}\n/**\n * For items which are not currently serializable via standard JSON.stringify (Undefined, BigInt, Set, Map, Symbol, etc.)\n * this creates a stringified, single key:value Object to represent the value; for example '{ \"$BigInt\": 123 }'\n *\n * Drawbacks:\n * no support Function / WeakMap / WeakSet / WeakRef\n * limited support for user-defined Classes (must be specifically registered with @Serialize() decorator)\n */\n/**\n * serialize Objects for string-safe stashing in WebStorage, Cache, etc\n * uses JSON.stringify where available, else returns stringified single key:value Object '{[$type]: value}'\n */\nexport function stringify(obj) {\n return stringize(obj, false);\n}\n/**\n * internal function to process stringify-requests (and hide second parameter)\n * where first argument is the object to stringify, and\n * the second argument is a boolean to indicate if function is being called recursively\n */\nfunction stringize(obj, recurse = true) {\n const arg = asType(obj);\n const one = curry(oneKey)(arg.type); // curry the oneKey() function\n switch (arg.type) {\n case 'String':\n if (!recurse) { // if a top-level string (e.g. 'true' or '1234')\n recurse = arg.value === 'true' // ensure true|false|null|1234 are quoted by JSON.stringify\n || arg.value === 'false' // so they will be correctly identified during objectify()\n || arg.value === 'null'\n || parseFloat(arg.value).toString() === arg.value;\n }\n return recurse\n ? JSON.stringify(encode(arg.value)) // encode string for safe-storage\n : encode(arg.value); // dont JSON.stringify a top-level string\n case 'Boolean':\n case 'Null':\n case 'Number':\n return JSON.stringify(arg.value); // JSON.stringify will correctly handle these\n case 'Void':\n case 'Undefined':\n return one(JSON.stringify('void')); // preserve 'undefined' values\t\t\n case 'BigInt':\n return one(arg.value.toString()); // even though BigInt has a toString method, it is not supported in JSON.stringify\n case 'Object':\n const obj = ownEntries(arg.value)\n .filter(([, val]) => isStringable(val))\n .map(([key, val]) => `${fromSymbol(key)}: ${stringize(val)}`)\n .join(',');\n return `{${obj}}`;\n case 'Array':\n const arr = arg.value\n .filter(val => isStringable(val))\n .map(val => stringize(val))\n .join(',');\n return `[${arr}]`;\n case 'Map':\n const map = Array.from(arg.value.entries())\n .filter(([, val]) => isStringable(val))\n .map(([key, val]) => `[${stringize(key)}, ${stringize(val)}]`)\n .join(',');\n return one(`[${map}]`);\n case 'Set':\n const set = Array.from(arg.value.values())\n .filter(val => isStringable(val))\n .map(val => stringize(val))\n .join(',');\n return one(`[${set}]`);\n case 'Symbol':\n return one(fromSymbol(arg.value));\n case 'RegExp':\n return one(stringize({ source: arg.value.source, flags: arg.value.flags }));\n case 'Class':\n default:\n const value = arg.value;\n switch (true) {\n case !isStringable(value): // Object is not stringify-able\n return undefined;\n case isFunction(value.toJSON): // Object has its own toJSON method\n return one(stringize(value.toJSON()));\n case isFunction(value.toString): // Object has its own toString method\n const str = value.toString();\n return one(str.includes('\"') // TODO: improve detection of JSON vs non-JSON strings\n ? str\n : JSON.stringify(str));\n case isFunction(value.valueOf): // Object has its own valueOf method\t\t\n return one(JSON.stringify(value.valueOf()));\n default: // else standard stringify\n return one(JSON.stringify(value, replacer));\n }\n }\n}\n/** rebuild an Object from its stringified representation */\nexport function objectify(str, sentinel) {\n if (!isString(str))\n return str; // skip parsing\n let parse;\n try {\n parse = JSON.parse(str, reviver); // catch if cannot parse\n }\n catch (error) {\n if (str.startsWith('\"') && str.endsWith('\"')) {\n console.warn(`objectify.parse: -> ${str}, ${error.message}`);\n return str; // bail-out\n }\n else\n return objectify(`\"${str}\"`, sentinel); // have another try, quoted\n }\n switch (true) {\n case str.startsWith('{') && str.endsWith('}'): // looks like Object\n case str.startsWith('[') && str.endsWith(']'): // looks like Array\n return traverse(parse, sentinel); // recurse into object\n default:\n return parse;\n }\n}\n/** recurse into Object / Array, looking for special single key:value Objects */\nfunction traverse(obj, sentinel) {\n if (isObject(obj)) {\n return typeify(ownEntries(obj)\n .reduce((acc, [key, val]) => Object.assign(acc, { [toSymbol(key)]: typeify(traverse(val, sentinel)) }), {}), sentinel);\n }\n if (isArray(obj)) {\n return ownValues(obj)\n .map(val => typeify(traverse(val, sentinel)));\n }\n return obj;\n}\n/** rebuild an Object from its single key:value representation */\nfunction typeify(json, sentinel) {\n if (!isObject(json) || ownKeys(json).length !== 1)\n return json; // only JSON Objects, with a single key:value pair\n const [$type, value] = ownEntries(json)[0];\n if (!String($type).startsWith('$'))\n return json; // not a serialized single key:value Object\n const type = $type.substring(1); // remove '$' prefix\n switch (type) {\n case 'String':\n case 'Boolean':\n case 'Object':\n case 'Array':\n return value; // these types are already handled by traverse()\n case 'Number':\n return Number(value);\n case 'BigInt':\n return BigInt(value);\n case 'Null':\n return null;\n case 'Undefined':\n case 'Empty':\n case 'Void':\n return sentinel?.(); // run Sentinel function to handle undefined values\n case 'Date':\n return new Date(value);\n case 'RegExp':\n return new RegExp(value.source, value.flags);\n case 'Symbol':\n return toSymbol(value);\n case 'Map':\n return new Map(value);\n case 'Set':\n return new Set(value);\n default:\n const cls = Registry.get($type); // lookup registered Class\n if (!cls) {\n console.warn(`objectify: dont know how to deserialize '${type}'`);\n return json; // return original JSON object\n }\n return Reflect.construct(cls, [value]); // create new Class instance\n }\n}\n//# sourceMappingURL=serialize.library.js.map","import { ownEntries } from '#library/reflection.library.js';\nimport { Registry } from '#library/serialize.library.js';\n/**\n * Some interesting Class Decorators\n */\n/** decorator to freeze a Class to prevent modification */\nexport function Immutable(value, { kind, name, addInitializer }) {\n name = String(name);\n switch (kind) {\n case 'class':\n const wrapper = {\n [name]: class extends value {\n constructor(...args) {\n super(...args);\n Object.freeze(this); // freeze the instance\n }\n }\n }[name];\n addInitializer(() => {\n const protect = (obj) => {\n ownEntries(Object.getOwnPropertyDescriptors(obj))\n .filter(([name]) => name !== 'constructor') // dont touch the constructor\n .forEach(([name, { configurable, writable }]) => {\n if (configurable) {\n const update = { configurable: false };\n if (writable)\n update.writable = false; // only data descriptors have 'writable'\n Object.defineProperty(obj, name, update);\n }\n });\n };\n protect(value); // protect original static members\n protect(value.prototype); // protect original prototype members\n protect(wrapper); // protect wrapper static members\n protect(wrapper.prototype); // protect wrapper prototype members\n });\n return wrapper;\n default:\n throw new Error(`@Immutable decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n/** register a Class for serialization */\nexport function Serializable(value, { kind, name, addInitializer }) {\n name = String(name); // cast as String\n switch (kind) {\n case 'class':\n addInitializer(() => Registry.set(`$${name}`, value)); // register the class for serialization, via its toString() method\n return value;\n default:\n throw new Error(`@Serializable decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n/** make a Class not instantiable */\nexport function Static(value, { kind, name }) {\n name = String(name);\n switch (kind) {\n case 'class':\n const wrapper = {\n [name]: class extends value {\n constructor(...args) {\n super(...args);\n throw new TypeError(`${name} is not a constructor`);\n }\n }\n }[name];\n return wrapper;\n default:\n throw new Error(`@Static decorating unknown 'kind': ${kind} (${name})`);\n }\n}\n//# sourceMappingURL=class.library.js.map","import { __esDecorate, __runInitializers } from \"tslib\";\nimport { Immutable } from '#library/class.library.js';\nimport { asType, isObject } from '#library/type.library.js';\nconst Method = {\n Log: 'log',\n Info: 'info',\n Warn: 'warn',\n Debug: 'debug',\n Error: 'error',\n};\n/**\n * provide standard logging methods to the console for a class\n */\nlet Logify = (() => {\n let _classDecorators = [Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Logify = class {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Logify = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n #name;\n #opts = {};\n #log(method, ...msg) {\n if (this.#opts.debug)\n console[method](this.#name, ...msg);\n }\n /**\n * if {catch:true} then show a warning on the console and return\n * otherwise show an error on the console and re-throw the error\n */\n catch(...msg) {\n if (this.#opts.catch) {\n this.warn(...msg); // show a warning on the console\n return; // safe-return\n }\n this.error(...msg); // this goes to the console\n throw new Error(`${this.#name}${msg.map(m => isObject(m) ? JSON.stringify(m) : String(m)).join(' ')}`); // catch will be loud or silent, based on #catch config\n }\n /** console.log */ log = (...msg) => this.#log(Method.Log, ...msg);\n /** console.info */ info = (...msg) => this.#log(Method.Info, ...msg);\n /** console.warn */ warn = (...msg) => this.#log(Method.Warn, ...msg);\n /** console.debug */ debug = (...msg) => this.#log(Method.Debug, ...msg);\n /** console.error */ error = (...msg) => this.#log(Method.Error, ...msg);\n constructor(self, opts = {}) {\n const arg = asType(self);\n switch (arg.type) {\n case 'String':\n this.#name = arg.value;\n break;\n // @ts-ignore\n case 'Object':\n Object.assign(opts, arg.value);\n default:\n this.#name = (self ?? this).constructor.name.concat(': ') ?? '';\n }\n this.#opts.debug = opts.debug ?? false; // default debug to 'false'\n this.#opts.catch = opts.catch ?? false; // default catch to 'false'\t\t\t\t\t\t\t\t\n }\n };\n return Logify = _classThis;\n})();\nexport { Logify };\n//# sourceMappingURL=logify.class.js.map","import { ownKeys, ownEntries } from '#library/reflection.library.js';\nimport { isObject, isArray, isReference, isFunction, isDefined, isEmpty, isNullish } from '#library/type.library.js';\n/** Get nested value */\nexport function extract(obj, path, dflt) {\n if (isEmpty(path))\n return obj; // finished searching\n if (!isObject(obj) && !isArray(obj))\n return obj;\n return path\n .toString()\n .replace(/\\[([^\\[\\]]*)\\]/g, '.$1.') // convert [indexes] to properties\n .split('.')\n .filter(field => !isEmpty(field)) // remove empty fields\n .reduce((acc, field) => acc?.[field] ?? null, obj) ?? dflt;\n}\n/** remove quotes around property names */\nexport const unQuoteObj = (obj) => {\n return JSON.stringify(obj)\n ?.replace(/\"([^\"]+)\":/g, '$1: ')\n ?.replace(/,/g, ', ');\n};\n/** copy enumerable properties to a new Object */\nexport const asObject = (obj) => {\n if (isNullish(obj) || !isObject(obj))\n return obj;\n const temp = isArray(obj) ? [] : {};\n ownKeys(obj)\n .forEach(key => temp[key] = asObject(obj[key]));\n return temp;\n};\n/** deep-compare object values for equality */\nexport const isEqual = (obj1 = {}, obj2 = {}) => {\n const keys = new Set(); // union of unique keys from both Objects\n const keys1 = isFunction(obj1.keys) ? Array.from(obj1.keys()) : ownKeys(obj1);\n const keys2 = isFunction(obj2.keys) ? Array.from(obj2.keys()) : ownKeys(obj2);\n keys1.forEach(key => keys.add(key));\n keys2.forEach(key => keys.add(key));\n return [...keys] // cast as Array\n .every(key => {\n const val1 = obj1[key];\n const val2 = obj2[key];\n return isReference(val1) && isReference(val2)\n ? isEqual(val1, val2) // recurse into object\n : val1 === val2;\n });\n};\n/** find all methods on an Object */\nexport const getMethods = (obj, all = false) => {\n const properties = new Set();\n let currentObj = obj;\n do {\n Object\n .getOwnPropertyNames(currentObj)\n .map(key => properties.add(key));\n } while (all && (currentObj = Object.getPrototypeOf(currentObj)));\n return [...properties.keys()]\n .filter(key => isFunction(obj[key]));\n};\n/** extract only defined values from Object */\nexport function ifDefined(obj) {\n return ownEntries(obj)\n .reduce((acc, [key, val]) => {\n if (isDefined(val))\n acc[key] = val;\n return acc;\n }, {});\n}\n/** extract a subset of keys from an object */\nexport const pick = (obj, ...keys) => {\n const ownKeys = Object.getOwnPropertyNames(obj);\n return keys.reduce((acc, key) => {\n if (ownKeys.includes(key))\n acc[key] = obj[key];\n return acc;\n }, {});\n};\n/** extract a named key from an array of objects */\nexport const pluck = (objs, key) => objs.map(obj => obj[key]);\n/** extend an object with the properties of another */\nexport const extend = (obj, ...objs) => Object.assign(obj, ...objs);\nexport const countProperties = (obj = {}) => ownKeys(obj).length;\nexport function looseIndex(arg) {\n if (isDefined(arg))\n return isFunction(arg) ? arg() : arg;\n return (obj) => isFunction(obj) ? obj() : obj;\n}\n/** loose object with symbols values */\nlooseIndex.stringSymbol = looseIndex();\n/** loose object with symbol keys and RegExp values */\nlooseIndex.symbolRegExp = looseIndex();\n/** loose object with symbol keys and string values */\nlooseIndex.symbolString = looseIndex();\n/** loose object with string keys and string values */\nlooseIndex.stringString = looseIndex();\n//# sourceMappingURL=object.library.js.map","import { clone, stringify } from '#library/serialize.library.js';\nimport { isIntegerLike, isArrayLike, isDefined, isInteger, isIterable, isNullish, isString, isUndefined, asType, isNumber } from '#library/type.library.js';\nexport function asArray(arr = [], fill) {\n switch (true) {\n case isArrayLike(arr): // allow for {length:nn} objects\n case isIterable(arr) && !isString(arr): // dont iterate Strings\n return Array.from(arr, val => {\n return isUndefined(fill) || isDefined(val)\n ? val // if no {fill}, then use {val}\n : clone(fill); // clone {fill} to create new Objects\n });\n default:\n return Array.of(arr);\n }\n}\n/** stringify if not nullish */\nexport function asString(str) {\n return isNullish(str)\n ? ''\n : isInteger(str)\n ? str.toString() + 'n'\n : stringify(str);\n}\n/** convert String | Number | BigInt to Number */\nexport function asNumber(str) {\n return parseFloat(str?.toString() ?? 'NaN');\n}\n/** convert String | Number to BigInt */\nexport function asInteger(str) {\n const arg = asType(str);\n switch (arg.type) {\n case 'BigInt':\n return arg.value; // already a BigInt\n case 'Number':\n return BigInt(Math.trunc(arg.value)); // cast as BigInt\n case 'String':\n return (isIntegerLike(arg.value)) // String representation of a BigInt\n ? BigInt(arg.value.slice(0, -1)) // get rid of trailing 'n'\n : BigInt(arg.value);\n default:\n return str;\n }\n}\n/** test if can convert String to Numeric */\nexport function isNumeric(str) {\n const arg = asType(str);\n switch (arg.type) {\n case 'Number':\n case 'BigInt':\n return true;\n case 'String':\n return isIntegerLike(arg.value)\n ? true // is Number | BigInt\n : !isNaN(asNumber(str)) && isFinite(str); // test if Number\n default:\n return false;\n }\n}\n/** return as Number if possible, else original String */\nexport const ifNumeric = (str, stripZero = false) => {\n switch (true) {\n case isInteger(str): // BigInt → Number\n return Number(str);\n case isNumber(str): // Number → as-is\n return str;\n case isNumeric(str) && (!str?.toString().startsWith('0') || stripZero):\n return asNumber(str); // numeric String → Number\n default:\n return str; // non-numeric String → as-is\n }\n};\n//# sourceMappingURL=coercion.library.js.map","import { objectify, stringify } from '#library/serialize.library.js';\nimport { CONTEXT, getContext } from '#library/utility.library.js';\nimport { isDefined, isUndefined, isString } from '#library/type.library.js';\nconst context = getContext();\nlet storage = context.type === CONTEXT.Browser\n ? context.global?.localStorage //as globalThis.Storage\t\t// default to localStorage in a browser\n : undefined;\n/** select local | session storage */\nexport function selStorage(store = 'local') {\n const name = (store + 'Storage');\n return storage = globalThis[name]; // return whichever was selected.\n}\nexport function getStorage(key, dflt) {\n let store;\n if (isUndefined(key))\n return dflt ?? {};\n switch (context.type) {\n case CONTEXT.Browser:\n store = storage.getItem(key);\n break;\n case CONTEXT.NodeJS:\n store = context.global.process.env[key];\n break;\n case CONTEXT.GoogleAppsScript:\n store = context.global.PropertiesService?.getUserProperties().getProperty(key);\n break;\n default:\n throw new Error(`Cannot determine Javascript context: ${context.type}`);\n }\n return isString(store)\n ? objectify(store) // rebuild object from its stringified representation\n : dflt;\n}\n/** set / delete storage */\nexport function setStorage(key, val) {\n const stash = isDefined(val) ? stringify(val) : undefined;\n const set = isDefined(stash);\n switch (context.type) {\n case CONTEXT.Browser:\n set\n ? storage.setItem(key, stash)\n : storage.removeItem(key);\n break;\n case CONTEXT.NodeJS:\n set\n ? (context.global.process.env[key] = stash)\n : (delete context.global.process.env[key]);\n break;\n case CONTEXT.GoogleAppsScript:\n set\n ? context.global.PropertiesService?.getUserProperties().setProperty(key, stash)\n : context.global.PropertiesService?.getUserProperties().deleteProperty(key);\n break;\n default:\n throw new Error(`Cannot determine Javascript context: ${context.type}`);\n }\n}\n//# sourceMappingURL=storage.library.js.map","import { $Target, allObject } from '#library/reflection.library.js';\nimport { secure } from '#library/utility.library.js';\nimport { isFunction } from '#library/type.library.js';\n/** Node.js custom inspection symbol */\nconst $Inspect = Symbol.for('nodejs.util.inspect.custom');\n/** Stealth Proxy pattern to allow for iteration and logging over a Frozen object */\nexport function getProxy(target) {\n secure(target);\n const tgt = target[$Target] ?? target;\n let cachedJSON;\n return new Proxy(target, {\n isExtensible: (t) => Reflect.isExtensible(t),\n preventExtensions: (t) => Reflect.preventExtensions(t),\n getOwnPropertyDescriptor: (_, key) => Reflect.getOwnPropertyDescriptor(tgt, key),\n getPrototypeOf: () => Reflect.getPrototypeOf(tgt),\n deleteProperty: (_, key) => Reflect.deleteProperty(tgt, key),\n ownKeys: () => Reflect.ownKeys(tgt),\n has: (_, key) => Reflect.has(tgt, key),\n set: (_, key, val) => Reflect.set(tgt, key, val),\n get: (_, key, receiver) => {\n if (key === $Target)\n return tgt; // found the 'stop' marker\n if (key === $Inspect || key === 'toJSON') { // two special properties require virtual closures\n const own = Object.getOwnPropertyDescriptor(tgt, key);\n if (own && isFunction(own.value)) // if object already has its own toJSON, return\n return own.value;\n if (!cachedJSON) { // otherwise, create a virtual closure\n const result = allObject(receiver); // resolve full-object representation\n cachedJSON = () => result; // memoize for subsequent calls\n }\n return cachedJSON; // return the memoized closure\n }\n const val = Reflect.get(tgt, key, receiver);\n return (typeof val === 'function') // if the value is a function\n ? val.bind(tgt) // bind it to the target\n : val; // else return the value\n },\n });\n}\n//# sourceMappingURL=proxy.library.js.map","import { asNumber, asString, isNumeric } from '#library/coercion.library.js';\nimport { stringify } from '#library/serialize.library.js';\nimport { isString, isObject, assertCondition, assertString, nullToValue } from '#library/type.library.js';\n// General functions\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// This section needs to be Function declarations so that they are hoisted\n// (because they are referenced in prototype.library)\n/**\n * clean a string to remove some standard control-characters (tab, line-feed, carriage-return) and trim redundant spaces.\n * allow for optional RegExp to specify additional match\n */\nexport function trimAll(str, pat) {\n return str\n .toString() // coerce to String\n .replace(pat, '') // remove regexp, if supplied\n .replace(/\\t/g, ' ') // replace with \n .replace(/(\\r\\n|\\n|\\r)/g, ' ') // replace & \n .replace(/\\s{2,}/g, ' ') // trim multiple \n .trim(); // leading/trailing \n}\n/** every word has its first letter capitalized */\nexport function toProperCase(...str) {\n return str\n .flat() // in case {str} was already an array\n .map(text => text.replace(/\\w\\S*/g, word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()))\n .join(' ');\n}\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst PAT = /[A-Z\\xC0-\\xD6\\xD8-\\xDE]?[a-z\\xDF-\\xF6\\xF8-\\xFF]+|[A-Z\\xC0-\\xD6\\xD8-\\xDE]+(?![a-z\\xDF-\\xF6\\xF8-\\xFF])|\\d+/g;\nexport const toCamelCase = (sentence) => {\n let [word, ...rest] = sentence.match(PAT) ?? [''];\n if (isNumeric(word)) {\n word = rest[0];\n rest.splice(0, 1);\n }\n return (sentence.startsWith('_') ? '_' : '') + word.toLocaleLowerCase() + toProperCase(...rest).replace(/ /g, '');\n};\nconst HEX = 16;\nexport const randomString = (len = 36) => {\n let str = '';\n do // generate random strings\n str += Math.floor(Math.random() * 10 ** 16).toString(HEX).substring(2, 15);\n while (str.length < len);\n return str.substring(0, len);\n};\nexport function sprintf(fmt, ...msg) {\n const regexp = /\\$\\{(\\d)\\}/g; // pattern to find \"${digit}\" parameter markers\n let sfmt = asString(fmt); // avoid mutate fmt\n if (!isString(fmt)) { // might be an Object\n msg.unshift(JSON.stringify(fmt)); // push to start of msg[]\n sfmt = ''; // reset the string-format\n }\n let cnt = 0; // if the format does not contain a corresponding '${digit}' then re-construct the parameters\n sfmt = sfmt.replace(/%[sj]/g, _ => `\\${${cnt++}}`); // flip all the %s or %j to a ${digit} parameter\n const params = Array.from(sfmt.matchAll(regexp))\n .map(match => Number(match[1])); // which parameters are in the fmt\n msg.forEach((_, idx) => {\n if (!params.includes(idx)) // if more args than params\n sfmt += `${sfmt.length === 0 ? '' : sfmt.endsWith(':') ? ' ' : ', '}\\${${idx}}`; // append a dummy params to fmt\n });\n // 2024-02-21 some Objects do not have a .toString method\n return sfmt.replace(regexp, (_, idx) => msg[idx]?.toString?.() || stringify(msg[idx]));\n}\n/** apply a plural suffix, if greater than '1' */\nexport const plural = (val, word, plural = word + 's') => {\n const _plural = (num, word, plural = word + 's') => [1, -1].includes(Number(num)) ? word : plural;\n return isObject(val)\n ? (num, word) => _plural(num, word, val[word])\n : _plural(val, word, plural);\n};\n/** strip a plural suffix, if endsWith 's' */\nexport const singular = (val) => val.endsWith('s') ? val.slice(0, -1) : val;\n/** make an Object's values into a Template Literals, and evaluate */\nexport const makeTemplate = (templateString) => (templateData) => new Function(`{${Object.keys(templateData).join(',')}}`, 'return `' + templateString + '`')(templateData);\nexport const toLower = (str) => isString(str) ? asString(str).toLowerCase().trim() : str;\nexport const toUpper = (str) => isString(str) ? asString(str).toUpperCase().trim() : str;\nexport const strlen = (str, min, max) => {\n assertString(str);\n assertCondition(str.length >= min && str.length <= (max ?? min), 'string length is not between specified min and max');\n return str;\n};\n/**\n * pad a string with leading character\n * @param\t\tnbr\tinput value to pad\n * @param\t\tlen\tfill-length (default: 2)\n * @param\t\tfill\tcharacter (default \\ for string and \\ for number)\n * @returns\tfixed-length string padded on the left with fill-character\n */\nexport const pad = (nbr = 0, len = 2, fill) => nbr.toString().padStart(len, nullToValue(fill, isNumeric(nbr) ? '0' : ' ').toString());\n/** pad a string with non-blocking spaces, to help right-align a display */\nexport const padString = (str, pad = 6) => (isNumeric(str) ? asNumber(str).toFixed(2).toString() : str.toString() ?? '').padStart(pad, '\\u007F');\n//# sourceMappingURL=string.library.js.map","import { __esDecorate, __runInitializers } from \"tslib\";\nimport { secure } from '#library/utility.library.js';\nimport { Serializable } from '#library/class.library.js';\nimport { stringify } from '#library/serialize.library.js';\nimport { memoizeMethod } from '#library/function.library.js';\nimport { ownEntries } from '#library/reflection.library.js';\nimport { getProxy } from './proxy.library.js';\nimport { asType, isArray, isNumber } from '#library/type.library.js';\n/** used to identify the Enumify type */ const tag = 'Enumify';\n/** helper method to create a property descriptor */\nfunction value(val) {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n value: val\n };\n}\n/**\n * private instance of the Enum Prototype, which is then Used to create each new Object-Enum\n*/\nconst ENUM = secure(Object.create(null, {\n count: memoizeMethod('count', function () { return this.entries().length; }),\n keys: memoizeMethod('keys', function () { return this.entries().map(([key]) => key); }),\n values: memoizeMethod('values', function () { return this.entries().map(([_, val]) => val); }),\n entries: memoizeMethod('entries', function () { return ownEntries(this, true); }),\n invert: memoizeMethod('invert', function () { return enumify(this.entries().reduce((acc, [key, val]) => ({ ...acc, [val]: key }), {})); }),\n toString: memoizeMethod('toString', function () { return stringify(this.toJSON()); }),\n has: value(function (key) { return this.keys().includes(key); }),\n includes: value(function (search) { return this.values().includes(search); }),\n keyOf: value(function (search) { return this.invert()[search]; }),\n extend: value(function (list) { return enumify.call(this, list); }),\n forEach: value(function (fn, thisArg) { this.entries().forEach((entry, index) => fn.call(thisArg, entry, index, this)); }),\n filter: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => (fn.call(thisArg, entry, index, this) ? Object.assign(acc, { [entry[0]]: entry[1] }) : acc), {})); }),\n map: value(function (fn, thisArg) { return enumify(this.entries().reduce((acc, entry, index) => { const res = fn.call(thisArg, entry, index, this); return Object.assign(acc, isArray(res) && res.length === 2 ? { [res[0]]: res[1] } : { [entry[0]]: res }); }, {})); }),\n [Symbol.iterator]: value(function () { return this.entries()[Symbol.iterator](); }),\n [Symbol.toStringTag]: value(tag),\n}));\nexport function enumify(list) {\n const proto = this ?? ENUM;\n const arg = asType(list);\n let stash = {};\n switch (arg.type) {\n case 'Enumify':\n case 'Object':\n Object.assign(stash, arg.value);\n break;\n case 'Array':\n arg.value.forEach((key, index) => {\n if (isNumber(key))\n throw new Error('Enumify: numeric keys are not supported');\n Object.assign(stash, { [key]: index });\n });\n break;\n default:\n throw new Error(`Enumify: invalid argument type: ${arg.type}`);\n }\n const target = Object.create(proto, Object.getOwnPropertyDescriptors(stash));\n return getProxy(target);\n}\n/** create an entry in the Serialization Registry to describe how to rebuild an Enum */\nlet Enumify = (() => {\n let _classDecorators = [Serializable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Enumify = class {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Enumify = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n constructor(list) {\n return enumify(list);\n }\n };\n return Enumify = _classThis;\n})();\nexport { Enumify };\n//# sourceMappingURL=enumerate.library.js.map","import { enumify } from '#library/enumerate.library.js';\nimport { secure } from '#library/utility.library.js';\n/**\n * Various enumerations used throughout Tempo library.\n * These are exported and added as static getters of the Tempo class.\n * Usage example:\n * ```typescript\n * \t\t\tconst dayNames = Tempo.WEEKDAY.keys();\t// ['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n * ```\n */\n/** */\nexport const WEEKDAY = enumify(['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']);\nexport const WEEKDAYS = enumify(['Everyday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']);\nexport const MONTH = enumify(['All', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);\nexport const MONTHS = enumify(['Every', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);\nexport const SEASON = enumify({ Summer: 'summer', Autumn: 'autumn', Winter: 'winter', Spring: 'spring' });\nexport const COMPASS = enumify({ North: 'north', East: 'east', South: 'south', West: 'west' });\n/** number of seconds in a time unit */\nexport const DURATION = enumify({\n /** approx number of seconds in a year */ year: 31_536_000,\n /** approx number of seconds in a month */ month: 2_628_000,\n /** number of seconds in a week */ week: 604_800,\n /** number of seconds in a day */ day: 86_400,\n /** number of seconds in an hour */ hour: 3_600,\n /** number of seconds in a minute */ minute: 60,\n /** one second */ second: 1,\n /** number of seconds in a millisecond */ millisecond: .001,\n /** number of seconds in a microsecond */ microsecond: .000_001,\n /** number of seconds in a nanosecond */ nanosecond: .000_000_001,\n});\n/** number of milliseconds in a time unit */\nexport const DURATIONS = enumify({\n /** approx number of milliseconds in a year */ years: DURATION.year * 1_000,\n /** approx number of milliseconds in a month */ months: DURATION.month * 1_000,\n /** number of milliseconds in a week */ weeks: DURATION.week * 1_000,\n /** number of milliseconds in a day */ days: DURATION.day * 1_000,\n /** number of milliseconds in an hour */ hours: DURATION.hour * 1_000,\n /** number of milliseconds in a minute */ minutes: DURATION.minute * 1_000,\n /** number of milliseconds in a second */ seconds: DURATION.second * 1_000,\n /** one millisecond */ milliseconds: DURATION.millisecond * 1_000,\n /** number of milliseconds in a microsecond */ microseconds: DURATION.microsecond * 1_000,\n /** number of milliseconds in a nanosecond */ nanoseconds: Number((DURATION.nanosecond * 1_000).toPrecision(6)),\n});\n/** pre-defined Format code short-cuts */\nexport const FORMAT = enumify({\n /** useful for standard date display */ display: '{www}, {dd} {mmm} {yyyy}',\n /** useful for standard datestamps */ weekDate: '{www}, {yyyy}-{mmm}-{dd}',\n /** useful for standard timestamps */ weekTime: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}',\n /** useful for standard full timestamps */ weekStamp: '{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}',\n /** useful for readable month and day */ dayMonth: '{dd}-{mmm}',\n /** useful for Date */ dayDate: '{dd}-{mmm}-{yyyy}',\n /** display with Time */ dayTime: '{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}',\n /** useful for stamping logs */ logStamp: '{yyyy}{mm}{dd}T{hhmiss}.{ff}',\n /** useful for sorting display-strings */ sortTime: '{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}',\n /** useful for sorting week order */ yearWeek: '{wy}{ww}',\n /** useful for sorting month order */ yearMonth: '{yyyy}{mm}',\n /** useful for sorting date order */ yearMonthDay: '{yyyy}{mm}{dd}',\n /** just Date portion */ date: '{yyyy}-{mm}-{dd}',\n /** just Time portion */ time: '{hh}:{mi}:{ss}',\n});\nexport const LIMIT = secure({\n /** Tempo(31-Dec-9999.23:59:59).ns */ maxTempo: Temporal.Instant.from('9999-12-31T23:59:59.999999999+00:00').epochNanoseconds,\n /** Tempo(01-Jan-1000.00:00:00).ns */ minTempo: Temporal.Instant.from('1000-01-01T00:00+00:00').epochNanoseconds,\n});\nexport const ELEMENT = enumify({\n yy: 'year',\n mm: 'month',\n ww: 'week',\n dd: 'day',\n hh: 'hour',\n mi: 'minute',\n ss: 'second',\n ms: 'millisecond',\n us: 'microsecond',\n ns: 'nanosecond',\n});\nexport const MUTATION = enumify(ELEMENT.values()).extend(['event', 'period', 'clock', 'time', 'date', 'start', 'mid', 'end']);\nexport const ZONED_DATE_TIME = enumify(['value', 'timeZoneId', 'calendarId', 'monthCode', 'offset', 'timeZone']).extend(ELEMENT.values());\nexport const OPTION = enumify(['value', 'mdyLocales', 'mdyLayouts', 'store', 'discovery', 'debug', 'catch', 'timeZone', 'calendar', 'locale', 'pivot', 'sphere', 'timeStamp', 'snippet', 'layout', 'event', 'period', 'formats', 'plugins']);\nexport const PARSE = enumify(['mdyLocales', 'mdyLayouts', 'formats', 'pivot', 'snippet', 'layout', 'event', 'period', 'anchor', 'value', 'discovery', 'plugins']);\nexport const DISCOVERY = enumify(['options', 'timeZones', 'terms', 'plugins']);\n//# sourceMappingURL=tempo.enum.js.map","import { isDefined } from '#library/type.library.js';\nconst SCHEMA = [\n ['year', 'yy'],\n ['month', 'mm'],\n ['day', 'dd'],\n ['hour', 'hh'],\n ['minute', 'mi'],\n ['second', 'ss'],\n ['millisecond', 'ms'],\n ['microsecond', 'us'],\n ['nanosecond', 'ns']\n];\n/**\n * find where a Tempo fits within a range of DateTime\n */\nexport function getTermRange(tempo, list, keyOnly = true) {\n const sorted = [...list]\n .sortBy('year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond')\n .toReversed();\n const match = sorted\n .find(range => {\n for (const [rKey, sKey] of SCHEMA) {\n const val = range[rKey];\n if (isDefined(val)) {\n const sVal = tempo[sKey];\n if (sVal > val)\n return true;\n if (sVal < val)\n return false;\n }\n }\n return true; // fallback if DateTime exactly matches a range criteria\n })\n ?? sorted.at(0); // fallback to wraparound at first item\n return keyOnly\n ? match?.key\n : match;\n}\n//# sourceMappingURL=term.utils.js.map","import { cloneify } from '#library/serialize.library.js';\nimport { COMPASS } from '#tempo/tempo.config/tempo.enum.js';\nimport { getTermRange } from './term.utils.js';\n/** definition of fiscal quarter ranges */\nconst ranges = [\n [\n { key: 'Q1', day: 1, month: 1, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q2', day: 1, month: 4, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q3', day: 1, month: 7, fiscal: 0, sphere: COMPASS.North },\n { key: 'Q4', day: 1, month: 10, fiscal: 0, sphere: COMPASS.North },\n ], [\n { key: 'Q1', day: 1, month: 7, fiscal: 1, sphere: COMPASS.South },\n { key: 'Q2', day: 1, month: 10, fiscal: 1, sphere: COMPASS.South },\n { key: 'Q3', day: 1, month: 1, fiscal: 0, sphere: COMPASS.South },\n { key: 'Q4', day: 1, month: 4, fiscal: 0, sphere: COMPASS.South },\n ]\n];\nexport const key = 'qtr';\nexport const scope = 'quarter';\nexport const description = 'Fiscal Quarter';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n const { yy, config: { sphere } } = this;\n const south = sphere !== COMPASS.North; // false = North, true = South\n const list = cloneify(ranges[+south]); // deep clone the range\n list.forEach(itm => itm.fiscal += yy); // calc the fiscal-year for quarter\n return getTermRange(this, list, keyOnly); // return the range\n}\n//# sourceMappingURL=term.quarter.js.map","import { cloneify } from '#library/serialize.library.js';\nimport { COMPASS } from '#tempo/tempo.config/tempo.enum.js';\nimport { getTermRange } from './term.utils.js';\n/** definition of meteorological season ranges */\nconst ranges = [\n [\n { key: 'Spring', day: 20, month: 3, symbol: 'Flower', sphere: COMPASS.North },\n { key: 'Summer', day: 21, month: 6, symbol: 'Sun', sphere: COMPASS.North },\n { key: 'Autumn', day: 23, month: 9, symbol: 'Leaf', sphere: COMPASS.North },\n { key: 'Winter', day: 22, month: 12, symbol: 'Snowflake', sphere: COMPASS.North },\n ], [\n { key: 'Spring', day: 1, month: 9, symbol: 'Flower', sphere: COMPASS.South },\n { key: 'Summer', day: 1, month: 12, symbol: 'Sun', sphere: COMPASS.South },\n { key: 'Autumn', day: 1, month: 3, symbol: 'Leaf', sphere: COMPASS.South },\n { key: 'Winter', day: 1, month: 6, symbol: 'Snowflake', sphere: COMPASS.South },\n ], [\n { key: 'Spring', day: 1, month: 3, symbol: 'Flower', trait: 'A time of renewal and growth' },\n { key: 'Summer', day: 1, month: 6, symbol: 'Sun', trait: 'A period of heat and fruition' },\n { key: 'Autumn', day: 1, month: 9, symbol: 'Leaf', trait: 'A time for harvest and contraction' },\n { key: 'Winter', day: 1, month: 12, symbol: 'Snowflake', trait: 'A period of stillness and consolidation' },\n ]\n];\nexport const key = 'szn';\nexport const scope = 'season';\nexport const description = 'Meteorlogical season';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n const { config: { sphere } } = this;\n const south = sphere !== COMPASS.North; // false = North, true = South\n const list = cloneify(ranges[+south]);\n if (!keyOnly) {\n const cn = getTermRange(this, ranges[2], false); // get the chinese season for the current day/month\n list.forEach(item => item['CN'] = cn); // add the chinese season to each range item\n }\n return getTermRange(this, list, keyOnly);\n}\n//# sourceMappingURL=term.season.js.map","import { getTermRange } from './term.utils.js';\nimport { cloneify } from '#library/serialize.library.js';\n/** definition of astrological zodiac ranges */\nconst ranges = [\n [\n { key: 'Aquarius', day: 20, month: 1, symbol: 'Ram', longitude: 300, planet: 'Uranus' },\n { key: 'Pisces', day: 19, month: 2, symbol: 'Fish', longitude: 330, planet: 'Neptune' },\n { key: 'Aries', day: 21, month: 3, symbol: 'Ram', longitude: 0, planet: 'Mars' },\n { key: 'Taurus', day: 20, month: 4, symbol: 'Bull', longitude: 30, planet: 'Venus' },\n { key: 'Gemini', day: 21, month: 5, symbol: 'Twins', longitude: 60, planet: 'Mercury' },\n { key: 'Cancer', day: 22, month: 6, symbol: 'Crab', longitude: 90, planet: 'Moon' },\n { key: 'Leo', day: 23, month: 7, symbol: 'Lion', longitude: 120, planet: 'Sun' },\n { key: 'Virgo', day: 23, month: 8, symbol: 'Maiden', longitude: 150, planet: 'Mercury' },\n { key: 'Libra', day: 23, month: 9, symbol: 'Scales', longitude: 180, planet: 'Venus' },\n { key: 'Scorpio', day: 23, month: 10, symbol: 'Scorpion', longitude: 210, planet: 'Pluto & Mars' },\n { key: 'Sagittarius', day: 22, month: 11, symbol: 'Centaur', longitude: 240, planet: 'Jupiter' },\n { key: 'Capricorn', day: 22, month: 12, symbol: 'Goat', longitude: 270, planet: 'Saturn' },\n ], [\n { key: 'Rat', traits: 'Adaptable, clever' },\n { key: 'Ox', traits: 'Diligent, strong' },\n { key: 'Tiger', traits: 'Passionate, courageous' },\n { key: 'Rabbit', traits: 'Artistic, gentle' },\n { key: 'Dragon', traits: 'Powerful, charismatic' },\n { key: 'Snake', traits: 'Wise, intuitive' },\n { key: 'Horse', traits: 'Energetic, independent' },\n { key: 'Goat', traits: 'Empathetic, calm' },\n { key: 'Monkey', traits: 'Smart, curious' },\n { key: 'Rooster', traits: 'Observant, hardworking' },\n { key: 'Dog', traits: 'Loyal, honest' },\n { key: 'Pig', traits: 'Compassionate, generous' },\n ], [\n { key: 'Wood' },\n { key: 'Fire' },\n { key: 'Earth' },\n { key: 'Metal' },\n { key: 'Water' },\n ]\n];\nexport const key = 'zdc';\nexport const scope = 'zodiac';\nexport const description = 'Astrological Zodiac sign';\n/** determine where the current Tempo instance fits within the above ranges */\nexport function define(keyOnly) {\n const list = cloneify(ranges[0]); // make a copy of the ranges array\n if (!keyOnly) {\n const cn = getChineseZodiac(this.yy); // get the chinese zodiac for the current year\n list.forEach(item => item['CN'] = cn); // add the chinese zodiac to each item\n }\n return getTermRange(this, list, keyOnly);\n}\n/** get the chinese zodiac for a given year */\nfunction getChineseZodiac(year) {\n const animalIndex = (year - 4) % 12; // calculate the animal index\n const elementIndex = Math.floor(((year - 4) % 10) / 2); // calculate the element index based on the last digit of the year\n const yinYang = year % 2 === 0 ? 'Yang' : 'Yin'; // determine Yin or Yang\n return {\n animal: ranges[1][animalIndex].key,\n traits: ranges[1][animalIndex].traits,\n element: ranges[2][elementIndex].key,\n yinYang: yinYang\n };\n}\n//# sourceMappingURL=term.zodiac.js.map","import { getTermRange } from './term.utils.js';\n/** definition of daily time periods */\nconst ranges = [\n { key: 'midnight', hour: 0 },\n { key: 'early', hour: 4 },\n { key: 'morning', hour: 8 },\n { key: 'midmorning', hour: 10 },\n { key: 'midday', hour: 12 },\n { key: 'afternoon', hour: 15, minute: 30 },\n { key: 'evening', hour: 18 },\n { key: 'night', hour: 20 },\n];\nexport const key = 'per';\nexport const scope = 'period';\nexport const description = 'Daily time period';\n/** determine where the current Tempo instance fits within the above range */\nexport function define(keyOnly) {\n return getTermRange(this, ranges, keyOnly);\n}\n//# sourceMappingURL=term.timeline.js.map","/**\n * Built-in term plugin registrations.\n *\n * This module exports a registration function to be called by tempo.class.ts.\n *\n * returns an array of Terms to be loaded into Tempo.#terms\n */\nimport * as qtr from './term.quarter.js';\nimport * as szn from './term.season.js';\nimport * as zdc from './term.zodiac.js';\nimport * as per from './term.timeline.js';\nexport default [\n { key: qtr.key, scope: qtr.scope, description: qtr.description, define: qtr.define },\n { key: szn.key, scope: szn.scope, description: szn.description, define: szn.define },\n { key: zdc.key, scope: zdc.scope, description: zdc.description, define: zdc.define },\n { key: per.key, scope: per.scope, description: per.description, define: per.define },\n];\n//# sourceMappingURL=term.import.js.map","import { looseIndex } from '#library/object.library.js';\nimport { secure } from '#library/utility.library.js';\n// BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW\n// TEMPO functionality heavily depends on these patterns\n/** common RegExp patterns */\nexport const Match = {\n /** match all {} pairs, if they start with a word char */ braces: /{([\\w]+(?:\\.[\\w]+)*)}/g,\n /** named capture-group, if it starts with a letter */ captures: /\\(\\?<([a-zA-Z][\\w]*)>(.*?)(?=) */ modifier: /[\\+\\-\\<\\>][\\=]?|this|next|prev|last/,\n /** offset post keywords (ago|hence) */ affix: /ago|hence/,\n /** strip out these characters from a string */ strips: /\\(|\\)/g,\n /** whitespace characters */ spaces: /\\s+/g,\n /** Z character */ zed: /^Z$/,\n};\n/** Tempo Symbol registry */\nexport const Token = looseIndex()({\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols\n /** year */ yy: Symbol('yy'),\n /** month */ mm: Symbol('mm'),\n /** day */ dd: Symbol('dd'),\n /** hour */ hh: Symbol('hh'),\n /** minute */ mi: Symbol('mi'),\n /** second */ ss: Symbol('ss'),\n /** fraction */ ff: Symbol('ff'),\n /** meridiem */ mer: Symbol('mer'),\n /** short weekday name */ www: Symbol('www'),\n /** relative-suffix */ afx: Symbol('afx'),\n /** time-suffix */ sfx: Symbol('sfx'),\n /** time unit */ unt: Symbol('unt'),\n /** separator */ sep: Symbol('sep'),\n /** modifier */ mod: Symbol('mod'),\n /** generic number */ nbr: Symbol('nbr'),\n /** Tempo event */ evt: Symbol('evt'),\n /** Tempo period */ per: Symbol('per'),\n /** time zone offset */ tzd: Symbol('tzd'),\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Layout Symbols\n /** date */ dt: Symbol('date'),\n /** time */ tm: Symbol('time'),\n /** date and time */ dtm: Symbol('dateTime'),\n /** day-month-year */ dmy: Symbol('dayMonthYear'),\n /** month-day-year */ mdy: Symbol('monthDayYear'),\n /** year-month-day */ ymd: Symbol('yearMonthDay'),\n /** day of month offset */ off: Symbol('offset'),\n /** weekDay */ wkd: Symbol('weekDay'),\n /** relative offset (years, days, hours, etc) */ rel: Symbol('relativeOffset'),\n /** timezone/calendar brackets */ brk: Symbol('brackets'),\n});\n/**\n * user will need to know these in order to configure their own patterns\n * Tempo.Snippet is a simple regex pattern object\t\t\t\t\t\te.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ }\n * Tempo.Layout is a string-combination of Snippet names\t\te.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?'\n * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex.\n * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument\n */\n/**\n * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy')\n */\n// Note: computed Components ('evt', 'per') are added during 'Tempo.init()' (for static) and/or 'new Tempo()' (per instance)\nexport const Snippet = looseIndex()({\n [Token.yy]: /(?([0-9]{2})?[0-9]{2})/, // arbitrary upper-limit of yy=9999\n [Token.mm]: /(?[0\\s]?[1-9]|1[0-2]|Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)/, // month-name (abbrev or full) or month-number 01-12\n [Token.dd]: /(?
[0\\s]?[1-9]|[12][0-9]|3[01])(?:\\s?(?:st|nd|rd|th))?/, // day-number 01-31\n [Token.hh]: /(?2[0-4]|[01]?[0-9])/, // hour-number 00-24\n [Token.mi]: /(\\:(?[0-5][0-9]))/, // minute-number 00-59\n [Token.ss]: /(\\:(?[0-5][0-9]))/, // seconds-number 00-59\n [Token.ff]: /(\\.(?[0-9]{1,9}))/, // fractional-seconds up-to 9-digits\n [Token.mer]: /(\\s*(?am|pm))/, // meridiem suffix (am,pm)\n [Token.sfx]: /((?:{sep}+|T)({tm}){tzd}?)/, // time-pattern suffix 'T {tm} Z'\n [Token.wkd]: /(?Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)/, // day-name (abbrev or full)\n [Token.tzd]: /(?Z|(?:\\+(?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:00)|-(?:(?:0[0-9]|1[0-1]):?[0-5][0-9]|12:00)))/, // time-zone offset\t+14:00 to -12:00\n [Token.nbr]: /(?[0-9]*)/, // modifier count\n [Token.afx]: new RegExp(`((s)? (?${Match.affix.source}))?{sep}?`), // affix optional plural 's' and (ago|hence)\n [Token.mod]: new RegExp(`((?${Match.modifier.source})?{nbr} *)`), // modifier (+,-,<,<=,>,>=) plus optional offset-count\n [Token.sep]: new RegExp(`(?:${Match.separator.source})`), // date-input separator character \"/\\\\-., \" (non-capture group)\n [Token.unt]: /(?year|month|week|day|hour|minute|second|millisecond)(?:s)?/, // useful for '2 days ago' etc\n [Token.brk]: /(\\[(?[^\\]]+)\\](?:\\[(?[^\\]]+)\\])?)?/, // timezone/calendar brackets [...]\n});\n/**\n * a {layout} is a Record of snippet-combinations describing an input DateTime argument\n * the Layout's keys are in the order that they will be checked against an input value\n */\nexport const Layout = looseIndex()({\n [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))', // calendar or event\n [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period\n [Token.dtm]: '({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?', // calendar/event and clock/period\n [Token.dmy]: '({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?', // day-month(-year)\n [Token.mdy]: '({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?', // month-day(-year)\n [Token.ymd]: '({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?', // year-month(-day)\n [Token.wkd]: '{mod}?{wkd}{afx}?{sfx}?', // special layout (no {dt}!) used for weekday calcs (only one that requires {wkd} pattern)\n [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset\n [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago)\n});\n/**\n * an {event} is a Record of regex-pattern-like-string keys that describe Date strings.\n * values can be a string or a function.\n * if assigning a function, use standard 'function()' syntax to allow for 'this' binding.\n * also, a function should always have a .toString() method which returns a parse-able Date string\n */\nexport const Event = looseIndex()({\n 'new.?years? ?eve': '31 Dec',\n 'nye': '31 Dec',\n 'new.?years?( ?day)?': '01 Jan',\n 'ny': '01 Jan',\n 'christmas ?eve': '24 Dec',\n 'christmas': '25 Dec',\n 'xmas ?eve': '24 Dec',\n 'xmas': '25 Dec',\n 'now': function () { return this.toPlainDateTime(); },\n 'today': function () { return this.toPlainDate(); },\n 'tomorrow': function () { return this.toPlainDate().add({ days: 1 }); },\n 'yesterday': function () { return this.toPlainDate().add({ days: -1 }); },\n});\n/**\n * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings.\n * values can be a string or a function.\n * if using a function, use regular 'function()' syntax to allow for 'this' binding.\n */\nexport const Period = looseIndex()({\n 'mid[ -]?night': '24:00',\n 'morning': '8:00',\n 'mid[ -]?morning': '10:00',\n 'mid[ -]?day': '12:00',\n 'noon': '12:00',\n 'after[ -]?noon': '3:00pm',\n 'evening': '18:00',\n 'night': '20:00',\n});\n/**\n * a {timeZone} alias dictionary mapping common abbreviations to IANA strings.\n * Tempo will check this registry to convert abbreviations before passing them to Temporal.\n */\nexport const TimeZone = looseIndex()({\n 'utc': 'UTC',\n 'gmt': 'Europe/London',\n 'est': 'America/New_York',\n 'cst': 'America/Chicago',\n 'mst': 'America/Denver',\n 'pst': 'America/Los_Angeles',\n 'aest': 'Australia/Sydney',\n 'acst': 'Australia/Adelaide',\n 'awst': 'Australia/Perth',\n 'nzt': 'Pacific/Auckland',\n 'cet': 'Europe/Paris',\n 'eet': 'Europe/Helsinki',\n 'ist': 'Asia/Kolkata',\n 'npt': 'Asia/Kathmandu',\n 'jst': 'Asia/Tokyo',\n});\n/** Reasonable default options for initial Tempo config */\nexport const Default = secure({\n /** log to console */ debug: false,\n /** catch or throw Errors */ catch: false,\n /** used to parse two-digit years*/ pivot: 75, /** @link https://en.wikipedia.org/wiki/Date_windowing */\n /** precision to measure timestamps (ms | us) */ timeStamp: 'ms',\n /** calendaring system */ calendar: 'iso8601',\n /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https://en.wikipedia.org/wiki/Date_format_by_country */\n /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']],\n});\n//# sourceMappingURL=tempo.default.js.map","import { asString } from '#library/coercion.library.js';\nimport { extract } from '#library/object.library.js';\nimport { ownEntries } from '#library/reflection.library.js';\nimport { stringify } from '#library/serialize.library.js';\nimport { isNumber, isDate, isTempo, isObject, isDefined, isUndefined, isFunction, nullToValue } from '#library/type.library.js';\n// adapted from https://jsbin.com/insert/4/edit?js,output\n/** insert a value into an Array by its sorted position */\nexport const sortInsert = (arr = [], val, key) => {\n const obj = isObject(val) && isDefined(key); // array of Objects\n let low = 0, high = arr.length;\n while (low < high) {\n const mid = (low + high) >>> 1; // divide by 2\n const source = obj\n ? arr[mid][key] // array of Object values\n : arr[mid]; // assume Primitive values\n const target = obj\n ? val[key]\n : val;\n if (source < target)\n low = mid + 1;\n else\n high = mid;\n }\n arr.splice(low, 0, val); // mutate original Array\n return arr;\n};\n/** provide a sort-function to order a set of keys */\nexport function sortBy(...keys) {\n const sortOptions = keys // coerce string => SortBy\n .flat() // flatten Array-of-Array\n .map(key => isObject(key) ? key : { field: stringify(key) }); // build Array of sort-options\n return (left, right) => {\n let result = 0; // 0 = same, -1 = leftright\n sortOptions.forEach(key => {\n if (result === 0) { // no need to look further if result !== 0\n const dir = key.dir === 'desc' ? -1 : 1;\n const field = key.field + (key.index ? `[${key.index}]` : '');\n const valueA = extract(left, field, nullToValue(key.default, 0));\n const valueB = extract(right, field, nullToValue(key.default, 0));\n switch (true) {\n case isNumber(valueA) && isNumber(valueB):\n case isDate(valueA) && isDate(valueB):\n case isTempo(valueA) && isTempo(valueB):\n result = dir * (valueA - valueB);\n break;\n default:\n result = dir * asString(valueA)?.localeCompare(asString(valueB));\n break;\n }\n }\n });\n return result;\n };\n}\n/** return an array sorted-by a series of keys */\nexport function sortKey(array, ...keys) {\n return array.sort(sortBy(...keys));\n}\nexport function byKey(arr, fnKey, ...keys) {\n if (isFunction(fnKey))\n return Object.groupBy(arr, fnKey);\n const keyed = [fnKey] // mapFn is a keyof T\n .concat(keys) // append any trailing keyof T[]\n .flat(); // flatten Array-of-Array\n return Object.groupBy(arr, itm => // group an array into an object with named keys\n keyed\n .map(key => isUndefined(itm[key]) ? '' : stringify(itm[key]))\n .join('.'));\n}\nexport function byLkp(arr, fnKey, ...keys) {\n const group = isFunction(fnKey)\n ? byKey(arr, fnKey) // group by the callback function\n : byKey(arr, fnKey, ...keys); // group by the list of keys\n return ownEntries(group)\n .reduce((acc, [key, grp]) => Object.assign(acc, { [key]: grp?.pop() }), {});\n}\n//# sourceMappingURL=array.library.js.map","import { trimAll, toProperCase } from '#library/string.library.js';\nimport { byKey, byLkp, sortKey } from '#library/array.library.js';\nimport { asArray } from '#library/coercion.library.js';\n// Prototype extensions\n// Remember to define any imports as a Function Declaration (not a Function Expression)\n// so that they are 'hoisted' prior to extending a prototype\n/**\n * extend an Object's prototype to include new method, if no clash\n */\nexport const patch = (proto, property, method) => {\n if (Object.hasOwn(proto.prototype, property)) { // if already defined,\n if (trimAll(method.toString()) !== trimAll(proto.prototype?.[property]?.toString()))\n console.warn(`${proto.name}.${property} already defined`); // show warning if different method definition\n }\n else {\n Object.defineProperty(proto.prototype, property, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: method,\n });\n }\n};\npatch(String, 'trimAll', function (pat) { return trimAll(this, pat); });\npatch(String, 'toProperCase', function () { return toProperCase(this); });\nfunction sorted(...keys) { return sortKey(this, ...keys); }\npatch(Array, 'orderBy', sorted); // order array by named keys\npatch(Array, 'sortBy', sorted); // sort array by named keys\nfunction keyed(...keys) { return byKey(this, ...keys); }\nfunction lookup(...keys) { return byLkp(this, ...keys); }\npatch(Array, 'keyedBy', keyed); // reduce array by named keys\npatch(Array, 'lookupBy', lookup); // reduce array by named keys, only one entry per key\npatch(Array, 'tap', function (fn) {\n fn(this); // run an arbitrary function\n return this; // then return the original array\n});\npatch(Array, 'clear', function () {\n this.fill(null).length = 0; // wipe the contents, then set the 'length' to zero\n return this;\n});\npatch(Array, 'distinct', function (mapfn) {\n return mapfn\n ? this.map(mapfn).distinct() // run the mapping selector, then recurse\n : Array.from(new Set(this)); // eliminate duplicates\n});\npatch(Array, 'cartesian', function (...args) {\n const [a, b = [], ...c] = args.length === 0 ? this : args;\n const cartFn = (a, b) => asArray([]).concat(...a.map(d => b.map(e => asArray([]).concat(d, e))));\n return b.length\n ? this.cartesian(cartFn(a, b), ...c) // run the cartFn function, then recurse\n : asArray(a || []); // return the collated result\n});\n//# sourceMappingURL=prototype.library.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport '#tempo/temporal.polyfill.js'; // side-effect runtime check for Temporal\n// #region library modules~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { Logify } from '#library/logify.class.js';\nimport { ifDefined } from '#library/object.library.js';\nimport { secure } from '#library/utility.library.js';\nimport { Immutable, Serializable } from '#library/class.library.js';\nimport { asArray, asNumber, asInteger, isNumeric, ifNumeric } from '#library/coercion.library.js';\nimport { cleanify, stringify } from '#library/serialize.library.js';\nimport { getStorage, setStorage } from '#library/storage.library.js';\nimport { ownKeys, ownEntries, getAccessors, omit } from '#library/reflection.library.js';\nimport { getProxy } from '#library/proxy.library.js';\nimport { getContext, CONTEXT } from '#library/utility.library.js';\nimport { pad, singular, toProperCase, trimAll } from '#library/string.library.js';\nimport { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#library/type.library.js';\nimport * as enums from '#tempo/tempo.config/tempo.enum.js';\nimport registerTerms from '#tempo/tempo.config/terms/term.import.js';\nimport { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#tempo/tempo.config/tempo.default.js';\nimport '#library/prototype.library.js'; // patch prototypes\n/** key to use for storage / globalThis Symbol */ export const $Tempo = Symbol.for('$Tempo');\n/** current execution context*/ const Context = getContext();\n// #region Const variables\n/**\n * # Tempo\n * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects.\n * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API.\n */\nlet Tempo = (() => {\n var _a, _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_getConfig;\n let _classDecorators = [Serializable, Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Tempo = _a = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Tempo\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Tempo = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n // #region Static enum properties~~~~~~~~~~~~~~~~~~~~~~~~~\n /** Weekday names (short-form) */ static get WEEKDAY() { return enums.WEEKDAY; }\n /** Weekday names (long-form) */ static get WEEKDAYS() { return enums.WEEKDAYS; }\n /** Month names (short-form) */ static get MONTH() { return enums.MONTH; }\n /** Month names (long-form) */ static get MONTHS() { return enums.MONTHS; }\n /** Time durations as seconds (singular) */ static get DURATION() { return enums.DURATION; }\n /** Time durations as milliseconds (plural) */ static get DURATIONS() { return enums.DURATIONS; }\n /** Quarterly Seasons */ static get SEASON() { return enums.SEASON; }\n /** Compass cardinal points */ static get COMPASS() { return enums.COMPASS; }\n /** Tempo to Temporal DateTime Units map */ static get ELEMENT() { return enums.ELEMENT; }\n /** Pre-configured format {name -> string} pairs */ static get FORMAT() { return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.formats; }\n /** some useful Dates */ static get LIMIT() { return enums.LIMIT; }\n static {\n // #endregion\n // #region Static private properties~~~~~~~~~~~~~~~~~~~~~~\n _Tempo_dbg = { value: new Logify('Tempo', {\n debug: Default?.debug ?? false,\n catch: Default?.catch ?? false\n }) };\n }\n static {\n /** Tempo state for the global configuration */ _Tempo_global = { value: {} };\n }\n static {\n /** a collection of parse rule-matches */ _Tempo_pending = { value: void 0 };\n }\n static {\n /** cache for next-available 'usr' Token key */ _Tempo_usrCount = { value: 0 };\n }\n static {\n /** mutable list of registered term plugins */ _Tempo_terms = { value: [] };\n }\n static {\n /** try to infer hemisphere using the timezone's daylight-savings setting */\n _Tempo_setSphere = { value: (shape, options) => {\n if (isUndefined(shape.config.timeZone) || __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, options, 'sphere'))\n return shape.config.sphere; // already specified or no timeZone to calculate from\n // use a fixed date (2024-01-01) to compare offsets for hemisphere detection\n const zdt = new Temporal.ZonedDateTime(BigInt(1_704_067_200) * BigInt(1_000_000_000), shape.config.timeZone);\n const jan = zdt.with({ day: 1, month: 1 }).offsetNanoseconds;\n const jun = zdt.with({ day: 1, month: 6 }).offsetNanoseconds;\n const dst = Math.sign(jan - jun); // timeZone offset difference between Jan and Jun\n switch (dst) {\n case -1:\n return Tempo.COMPASS.North; // clock moves backward in Northern hemisphere\n case 1:\n return Tempo.COMPASS.South; // clock moves forward in Southern hemisphere\n case 0:\n default:\n return void 0; // timeZone does not observe DST\n }\n } };\n }\n static {\n /** properCase week-day / calendar-month */\n _Tempo_prefix = { value: (str) => toProperCase(String(str).substring(0, 3)) };\n }\n static {\n /** get first Canonical name of a supplied locale */\n _Tempo_locale = { value: (locale) => {\n let language;\n try { // lookup locale\n language = Intl.getCanonicalLocales(locale.replace('_', '-'))[0];\n }\n catch (error) { } // catch unknown locale\n const global = Context.global;\n return language ??\n global?.navigator?.languages?.[0] ?? // fallback to current first navigator.languages[]\n global?.navigator?.language ?? // else navigator.language\n Default.locale ?? // else default locale\n locale; // cannot determine locale\n } };\n }\n static load(arg, options) {\n asArray(arg).flat(1).forEach(item => {\n if (isFunction(item)) {\n if (!item.installed) {\n item(options, this, (val) => new this(val)); // handle Plugins (Functional extension)\n item.installed = true;\n }\n }\n if (isObject(item) && isString(item.key) && isFunction(item.define)) {\n if (!__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).some(term => term.key === item.key))\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms).push(item); // handle TermPlugins (Grammar extension)\n }\n if (isObject(item) && ownKeys(item).some(key => enums.DISCOVERY.has(key))) {\n globalThis[$Tempo] = item; // handle Discovery (Configuration bootstrapping)\n this.init();\n }\n });\n return this;\n }\n /**\n * Initializes the global default configuration for all subsequent `Tempo` instances.\n *\n * Settings are inherited in this priority:\n * 1. Reasonable library defaults (defined in tempo.config.js)\n * 2. Persistent storage (e.g. localStorage), if available.\n * 3. `options` provided to this method.\n *\n * @param options - Configuration overrides to apply globally.\n * @returns The resolved global configuration.\n */\n static init(options = {}) {\n if (isEmpty(options)) { // if no options supplied, reset all\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse = {\n snippet: Object.assign({}, Snippet),\n layout: Object.assign({}, Layout),\n event: Object.assign({}, Event),\n period: Object.assign({}, Period),\n mdyLocales: __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, Default.mdyLocales),\n mdyLayouts: asArray(Default.mdyLayouts),\n pivot: Default.pivot,\n };\n const { timeZone, calendar } = Intl.DateTimeFormat().resolvedOptions();\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config = Object.assign({}, omit({ ...Default }, ...enums.PARSE.keys()), // use Default as base, omit parse-related\n {\n calendar,\n timeZone,\n locale: __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_locale).call(Tempo),\n discovery: Symbol.keyFor($Tempo),\n formats: Object.create(enums.FORMAT),\n scope: 'global'\n });\n __classPrivateFieldSet(Tempo, _classThis, 0, \"f\", _Tempo_usrCount); // reset user-key counter\n for (const key of Object.keys(Token)) // purge user-allocated Tokens\n if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys\n delete Token[key];\n this.load(registerTerms); // register built-in term plugins\n const storeKey = Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), $Tempo));\n }\n else {\n const discovery = options.discovery ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.discovery ?? Symbol.keyFor($Tempo);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global), discovery), options);\n }\n if (Context.type === CONTEXT.Browser || options.debug === true)\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(Tempo.config, 'Tempo:', __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n return Tempo.config;\n }\n /** release global config and reset library to defaults */\n static [(_Tempo_proto = function _Tempo_proto(obj) { return Object.getPrototypeOf(obj); }, _Tempo_hasOwn = function _Tempo_hasOwn(obj, key) { return Object.hasOwn(obj, key); }, _Tempo_isLocal = function _Tempo_isLocal(shape) { return shape.config.scope === 'local'; }, _Tempo_create = function _Tempo_create(obj, name) { return Object.create(__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, obj)[name]); }, _Tempo_setEvents = function _Tempo_setEvents(shape) {\n const events = ownEntries(shape.parse.event, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'event') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'isMonthDay'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = events\n .map(([pat, _], idx) => `(?<${src}evt${idx}>${pat})`) // assign a number to the pattern\n .join('|'); // make an 'Or' pattern for the event-keys\n if (groups) {\n const protoEvt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.evt]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoEvt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.evt, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n if (shape.parse.isMonthDay) {\n const protoDt = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.layout)[Token.dt];\n const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})';\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || localDt !== protoDt) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n shape.parse.layout = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'layout');\n Object.defineProperty(shape.parse.layout, Token.dt, {\n value: localDt,\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_setPeriods = function _Tempo_setPeriods(shape) {\n const periods = ownEntries(shape.parse.period, true);\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'period'))\n return; // no local change needed\n const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal\n const groups = periods\n .map(([pat, _], idx) => `(?<${src}per${idx}>${pat})`) // {pattern} is the 1st element of the tuple\n .join('|'); // make an 'or' pattern for the period-keys\n if (groups) {\n const protoPer = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.per]?.source;\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) || groups !== protoPer) {\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet'))\n shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, 'snippet');\n Object.defineProperty(shape.parse.snippet, Token.per, {\n value: new RegExp(groups),\n enumerable: true,\n writable: true,\n configurable: true\n });\n }\n }\n }, _Tempo_isMonthDay = function _Tempo_isMonthDay(shape) {\n const monthDay = [...asArray(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.mdyLocales)];\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales'))\n monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global)\n return monthDay.some(mdy => {\n const m = mdy;\n const tzs = m.timeZones ?? m.getTimeZones?.() ?? [];\n return tzs.includes(shape.config.timeZone);\n });\n }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) {\n const layouts = ownEntries(shape.parse.layout); // get entries of Layout Record\n const swap = shape.parse.mdyLayouts; // get the swap-tuple\n let chg = false; // no need to rebuild, if no change\n swap\n .forEach(([dmy, mdy]) => {\n const idx1 = layouts.findIndex(([key]) => key.description === dmy); // 1st swap element exists in {layouts}\n const idx2 = layouts.findIndex(([key]) => key.description === mdy); // 2nd swap element exists in {layouts}\n if (idx1 === -1 || idx2 === -1)\n return; // no pair to swap\n const swap1 = (idx1 < idx2) && shape.parse.isMonthDay; // we prefer {mdy} and the 1st tuple was found earlier than the 2nd\n const swap2 = (idx1 > idx2) && !shape.parse.isMonthDay; // we dont prefer {mdy} and the 1st tuple was found later than the 2nd\n if (swap1 || swap2) { // since {layouts} is an array, ok to swap by-reference\n [layouts[idx1], layouts[idx2]] = [layouts[idx2], layouts[idx1]];\n chg = true;\n }\n });\n if (chg)\n shape.parse.layout = Object.fromEntries(layouts); // rebuild Layout in new parse order\n }, _Tempo_setConfig = function _Tempo_setConfig(shape, ...options) {\n const mergedOptions = Object.assign({}, ...options);\n if (isEmpty(mergedOptions)) // nothing to do\n return;\n if (mergedOptions.store) // check for local-storage\n Object.assign(mergedOptions, { ...Tempo.readStore(mergedOptions.store), ...mergedOptions });\n /** helper to normalize snippet/layout Options into the target Config */\n const collect = (target, value, convert) => {\n const itm = asType(value);\n target ??= {};\n switch (itm.type) {\n case 'Object':\n ownEntries(itm.value)\n .forEach(([k, v]) => target[Tempo.getSymbol(k)] = convert(v));\n break;\n case 'String':\n case 'RegExp':\n target[Tempo.getSymbol()] = convert(itm.value);\n break;\n case 'Array':\n itm.value.forEach(elm => collect(target, elm, convert));\n break;\n }\n };\n ownEntries(mergedOptions)\n .forEach(([optKey, optVal]) => {\n if (isUndefined(optVal))\n return; // skip undefined values\n const arg = asType(optVal);\n switch (optKey) {\n case 'snippet':\n case 'layout':\n case 'event':\n case 'period':\n // lazy-shadowing: only create local object if it doesn't already exist on local shape\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, optKey))\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_create).call(Tempo, shape.parse, optKey);\n const rule = shape.parse[optKey];\n if (['snippet', 'layout'].includes(optKey)) {\n collect(rule, arg.value, v => optKey === 'snippet'\n ? isRegExp(v) ? v : new RegExp(v)\n : isRegExp(v) ? v.source : v);\n }\n else {\n asArray(arg.value)\n .forEach(elm => ownEntries(elm).forEach(([key, val]) => rule[key] = val));\n }\n break;\n case 'mdyLocales':\n shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_mdyLocales).call(Tempo, arg.value);\n break;\n case 'mdyLayouts': // these are the 'layouts' that need to swap parse-order\n shape.parse[optKey] = asArray(arg.value);\n break;\n case 'pivot':\n shape.parse[\"pivot\"] = Number(arg.value);\n break;\n case 'config':\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, shape, arg.value);\n break;\n case 'timeZone':\n const zone = String(arg.value).toLowerCase();\n shape.config.timeZone = TimeZone[zone] ?? arg.value;\n break;\n case 'formats':\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.config, 'formats'))\n shape.config.formats = shape.config.formats.extend({}); // shadow parent prototype\n if (isObject(arg.value))\n shape.config.formats = shape.config.formats.extend(arg.value);\n break;\n case 'discovery':\n shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal;\n break;\n case 'plugins':\n asArray(optVal).forEach(p => this.load(p));\n break;\n case 'anchor':\n break; // internal anchor used for relativity parsing\n default: // else just add to config\n Object.assign(shape.config, { [optKey]: optVal });\n break;\n }\n });\n const isMonthDay = __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isMonthDay).call(Tempo, shape);\n if (isMonthDay !== __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_proto).call(Tempo, shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local'\n shape.parse.isMonthDay = isMonthDay;\n shape.config.sphere = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_setSphere).call(Tempo, shape, mergedOptions);\n if (isDefined(shape.parse.mdyLayouts))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_swapLayout).call(Tempo, shape);\n if (isDefined(shape.parse.event))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setEvents).call(Tempo, shape);\n if (isDefined(shape.parse.period))\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPeriods).call(Tempo, shape);\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setPatterns).call(Tempo, shape); // setup Regex DateTime patterns\n }, _Tempo_mdyLocales = function _Tempo_mdyLocales(value) {\n return asArray(value)\n .map(mdy => new Intl.Locale(mdy))\n .map(mdy => ({ locale: mdy.baseName, timeZones: mdy.getTimeZones?.() ?? [] }));\n }, _Tempo_setDiscovery = function _Tempo_setDiscovery(shape, key = shape.config.discovery ?? $Tempo) {\n const sym = isString(key) ? Symbol.for(key) : key;\n const discovery = globalThis[sym];\n if (!isObject(discovery))\n return {};\n // 1. Process TimeZones (normalize to lowercase for lookup)\n const timeZones = discovery.timeZones ?? {};\n for (const [key, value] of Object.entries(timeZones))\n TimeZone[key.toLowerCase()] = value;\n // 2. Process Terms\n if (discovery.terms)\n this.load(asArray(discovery.terms));\n // 3. Process Formats\n if (discovery.formats)\n shape.config.formats = shape.config.formats.extend(discovery.formats);\n // 4. Process Plugins\n if (discovery.plugins)\n asArray(discovery.plugins).forEach(p => this.load(p));\n // 4. Process Options\n let opts = discovery.options || {};\n return isFunction(opts) ? opts() : opts;\n }, _Tempo_setPatterns = function _Tempo_setPatterns(shape) {\n const snippet = shape.parse.snippet;\n // if local and no snippet or layout overrides, we can just use the prototype's patterns\n if (__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet') && !__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout'))\n return;\n // ensure we have our own Map to mutate (shadow if local)\n if (!__classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_hasOwn).call(Tempo, shape.parse, 'pattern'))\n shape.parse.pattern = new Map();\n shape.parse.pattern.clear(); // reset {pattern} Map\n for (const [sym, layout] of ownEntries(shape.parse.layout, true))\n shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet));\n }, Symbol.dispose)]() { Tempo.init(); }\n /** Reads options from persistent storage (e.g., localStorage). */\n static readStore(key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return getStorage(key, {});\n }\n /** Writes configuration into persistent storage. */\n static writeStore(config, key = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config.store) {\n return setStorage(key, config);\n }\n /** lookup or registers a new `Symbol` for a given key. */\n static getSymbol(key) {\n var _b, _c;\n if (isUndefined(key)) {\n const usr = `usr.${__classPrivateFieldSet(_b = Tempo, _classThis, (_c = __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_usrCount), ++_c), \"f\", _Tempo_usrCount)}`; // allocate a prefixed 'user' key\n return Token[usr] = Symbol(usr); // add to Symbol register\n }\n if (isSymbol(key))\n return key;\n if (isString(key) && key.includes('.')) {\n const description = key.split('.').pop(); // use last segment as description\n return Token[key] ??= Symbol(description);\n }\n return Token[key] ?? Symbol.for(`$Tempo.${key}`);\n }\n /** translates {layout} into an anchored, case-insensitive RegExp. */\n static regexp(layout, snippet) {\n // helper function to replace {name} placeholders with their corresponding snippets\n function matcher(str, depth = 0) {\n if (depth > 12)\n return isRegExp(str) ? str.source : str; // depth guard\n let source = isRegExp(str) ? str.source : str;\n if (isRegExpLike(source)) // string that looks like a RegExp\n source = source.substring(1, source.length - 1); // remove the leading/trailing \"/\"\n if (source.startsWith('^') && source.endsWith('$'))\n source = source.substring(1, source.length - 1); // remove the leading/trailing anchors (^ $)\n return source.replace(Match.braces, (match, name) => {\n const token = Tempo.getSymbol(name); // get the symbol for this {name}\n const customs = snippet?.[token]?.source ?? snippet?.[name]?.source;\n const globals = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[token]?.source ?? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.snippet[name]?.source;\n const layout = Layout[token]; // get resolution source (layout)\n let res = customs ?? globals ?? layout; // get the snippet/layout source\n if (isNullish(res) && name.includes('.')) { // if no definition found, try fallback\n const prefix = name.split('.')[0]; // get the base token name\n const pToken = Tempo.getSymbol(prefix);\n res = snippet?.[pToken]?.source ?? snippet?.[prefix]?.source\n ?? Snippet[pToken]?.source ?? Snippet[prefix]?.source\n ?? Layout[pToken];\n }\n if (res && name.includes('.')) { // wrap dotted extensions for identification\n const safeName = name.replace(/\\./g, '_');\n if (!res.startsWith(`(?<${safeName}>`))\n res = `(?<${safeName}>${res})`;\n }\n return (isNullish(res) || res === match) // if no definition found,\n ? match // return the original match\n : matcher(res, depth + 1); // else recurse to see if snippet contains embedded \"{}\" pairs\n });\n }\n layout = matcher(layout); // initiate the layout-parse\n return new RegExp(`^(${layout})$`, 'i'); // translate the source into a regex\n }\n /** Compares two `Tempo` instances or date-time values. */\n static compare(tempo1, tempo2) {\n const one = new Tempo(tempo1), two = new Tempo(tempo2);\n return Number((one.nano > two.nano) || -(one.nano < two.nano)) + 0;\n }\n /** global Tempo configuration */\n static get config() {\n return getProxy(omit({ ...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config }, 'value'));\n }\n /** global discovery configuration */\n static get discovery() {\n const sym = Symbol.for(this.config.discovery);\n return __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_getConfig).call(Tempo, sym);\n }\n /**\n * Returns a snapshot of the configuration layers used by Tempo.\n * Useful for debugging how the final configuration is built.\n */\n static get options() {\n const keyFor = this.config.store ?? Symbol.keyFor($Tempo);\n return {\n default: this.default,\n discovery: this.discovery,\n storage: getProxy(Object.assign({ key: keyFor, scope: 'storage' }, omit(Tempo.readStore(keyFor), 'value'))),\n global: this.config,\n };\n }\n static from(tempo, options) { return new this(tempo, options); }\n static now() { return Temporal.Now.instant().epochNanoseconds; }\n /** static Tempo.terms getter */\n static get terms() {\n return secure(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms)\n .map(({ define, ...rest }) => rest)); // omit the 'define' method\n }\n /** static Tempo properties getter */\n static get properties() {\n return secure(getAccessors(Tempo)\n .filter(acc => getType(acc) !== 'Symbol')); // omit any Symbol properties\n }\n /** Tempo initial default settings */\n static get default() {\n return secure({ ...Default, scope: 'default', timeZone: TimeZone });\n }\n /**\n * configuration governing the static 'rules' used when parsing Tempo.DateTime argument\n */\n static get parse() {\n const parse = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse;\n return secure({\n ...parse, // spread primitives like {pivot}\n snippet: { ...parse.snippet }, // spread nested objects\n layout: { ...parse.layout },\n event: { ...parse.event },\n period: { ...parse.period },\n mdyLocales: [...parse.mdyLocales],\n mdyLayouts: [...parse.mdyLayouts],\n });\n }\n /** iterate over Tempo properties */\n static [(_Tempo_getConfig = function _Tempo_getConfig(sym) {\n const discovery = globalThis[sym];\n return getProxy(omit({ ...discovery, scope: 'discovery' }, 'value'));\n }, Symbol.iterator)]() {\n return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters'\n }\n // #endregion Static public methods\n // #region Instance symbols~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** allow for auto-convert of Tempo to BigInt, Number or String */\n [Symbol.toPrimitive](hint) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.config, getType(this), '.hint: ', hint);\n switch (hint) {\n case 'string': return this.toString(); // ISO 8601 string\n case 'number': return this.epoch.ms; // Unix epoch (milliseconds)\n default: return this.nano; // Unix epoch (nanoseconds)\n }\n }\n /** iterate over instance formats */\n [Symbol.iterator]() {\n return ownEntries(this.#fmt)[Symbol.iterator](); // instance Iterator over tuple of FormatType[]\n }\n get [Symbol.toStringTag]() {\n return 'Tempo'; // hard-coded to avoid minification mangling\n }\n // #endregion Instance symbols\n // #region Instance properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /** constructor tempo */ #tempo;\n /** constructor options */ #options = {};\n /** instantiation Temporal Instant */ #now;\n /** underlying Temporal ZonedDateTime */ #zdt;\n /** temporary anchor used during parsing */ #anchor;\n /** prebuilt formats, for convenience */ #fmt = {};\n /** instance term plugins */ #term = Object.create(null);\n /** instance values to complement static values */ #local = {\n /** instance configuration */ config: {},\n /** instance parse rules (only populated if provided) */ parse: { result: [] }\n };\n constructor(tempo, options = {}) {\n this.#now = Temporal.Now.instant(); // stash current Instant\n [this.#tempo, this.#options] = this.#swap(tempo, options); // swap arguments around, if arg1=Options or Temporal-like\n this.#setLocal(this.#options); // parse the local options looking for overrides to Tempo.#global.config\n // we now have all the info we need to instantiate a new Tempo\n try {\n this.#anchor = this.#options.anchor;\n this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg\n const cal = this.#local.config.calendar;\n if (isString(cal) && ['iso8601', 'gregory'].includes(cal)) {\n for (const key of this.#local.config.formats.keys())\n Object.assign(this.#fmt, { [key]: this.format(key) });\n }\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_terms) // add the plug-in getters for the pre-defined Terms to the instance\n .forEach(({ key, scope, define }) => {\n this.#setTerm(this, key, define, true); // add a getter which returns the key-field only\n this.#setTerm(this, scope, define, false); // add a getter which returns a range-object\n });\n if (isDefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) { // are we mutating with 'set()' ?\n this.#local.parse.result.unshift(...__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending)); // prepend collected parse-matches\n __classPrivateFieldSet(Tempo, _classThis, void 0, \"f\", _Tempo_pending); // and reset mutating-flag\n }\n secure(this.#fmt); // prevent mutations\n secure(this.#term); // secure the initial object with getters\n secure(this.#local.config);\n secure(this.#local.parse);\n }\n catch (err) {\n console.error('Tempo Constructor Error:', err);\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.config, `Cannot create Tempo: ${err.message}\\n${err.stack}`);\n return {}; // return empty Object\n }\n }\n // This function has be defined within the Tempo class (and not imported from another module) because it references a private-variable\n /** this will add a getter on the instance #term private field */\n #setTerm(self, name, define, isKeyOnly) {\n if (isDefined(name) && isDefined(define)) {\n Object.defineProperty(self.#term, name, {\n configurable: false,\n enumerable: false,\n get: function () {\n const value = define.call(self, isKeyOnly); // evaluate the term range-lookup\n self.#term = secure(Object.create(self.#term, {\n [name]: {\n value,\n configurable: false,\n writable: false,\n enumerable: true\n }\n }));\n return secure(value);\n }\n });\n }\n }\n // #endregion Constructor\n // #region Instance public accessors~~~~~~~~~~~~~~~~~~~~~~\n /** 4-digit year (e.g., 2024) */ get yy() { return this.toDateTime().year; }\n /** 4-digit ISO week-numbering year */ get wy() { return this.ww === 1 && this.mm === Tempo.MONTH.Dec ? this.yy + 1 : (this.ww >= 52 && this.mm === Tempo.MONTH.Jan ? this.yy - 1 : this.yy); }\n /** Month number: Jan=1, Dec=12 */ get mm() { return this.toDateTime().month; }\n /** ISO week number of the year */ get ww() { return this.toDateTime().weekOfYear; }\n /** Day of the month (1-31) */ get dd() { return this.toDateTime().day; }\n /** Day of the month (alias for `dd`) */ get day() { return this.toDateTime().day; }\n /** Hour of the day (0-23) */ get hh() { return this.toDateTime().hour; }\n /** Minutes of the hour (0-59) */ get mi() { return this.toDateTime().minute; }\n /** Seconds of the minute (0-59) */ get ss() { return this.toDateTime().second; }\n /** Milliseconds of the second (0-999) */ get ms() { return this.toDateTime().millisecond; }\n /** Microseconds of the millisecond (0-999) */ get us() { return this.toDateTime().microsecond; }\n /** Nanoseconds of the microsecond (0-999) */ get ns() { return this.toDateTime().nanosecond; }\n /** Fractional seconds (e.g., 0.123456789) */ get ff() { return +(`0.${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`); }\n /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz() { return this.toDateTime().timeZoneId; }\n /** Unix timestamp (defaults to milliseconds) */ get ts() { return this.epoch[this.#local.config.timeStamp]; }\n /** Short month name (e.g., 'Jan') */ get mmm() { return Tempo.MONTH.keyOf(this.#zdt.month); }\n /** Full month name (e.g., 'January') */ get mon() { return Tempo.MONTHS.keyOf(this.#zdt.month); }\n /** Short weekday name (e.g., 'Mon') */ get www() { return Tempo.WEEKDAY.keyOf(this.#zdt.dayOfWeek); }\n /** Full weekday name (e.g., 'Monday') */ get wkd() { return Tempo.WEEKDAYS.keyOf(this.toDateTime().dayOfWeek); }\n /** ISO weekday number: Mon=1, Sun=7 */ get dow() { return this.toDateTime().dayOfWeek; }\n /** Nanoseconds since Unix epoch (BigInt) */ get nano() { return this.toDateTime().epochNanoseconds; }\n /** current Tempo configuration */\n get config() {\n return getProxy(omit({ ...this.#local.config }, 'scope', 'value', 'anchor'));\n }\n /** Instance-specific parse rules (merged with global) */ get parse() { return this.#local.parse; }\n /** Object containing results from all term plugins */ get term() { return getProxy(this.#term); }\n /** Formatted results for all pre-defined format codes */ get fmt() { return this.#fmt; }\n /** units since epoch */ get epoch() {\n return secure({\n /** seconds since epoch */ ss: Math.trunc(this.toDateTime().epochMilliseconds / 1_000),\n /** milliseconds since epoch */ ms: this.toDateTime().epochMilliseconds,\n /** microseconds since epoch */ us: Number(this.toDateTime().epochNanoseconds / BigInt(1_000)),\n /** nanoseconds since epoch */ ns: this.toDateTime().epochNanoseconds,\n });\n }\n // #endregion Instance public accessors\n // #region Instance private accessors\n /**\n * @Immutable class decorators wrap the class but leave internal lexical bindings pointing to the original, undecorated class.\n * To ensure new instances returned by instance methods are properly frozen,\n * we must instantiate internally from the decorated wrapper (which is bound to `this.constructor`)\n * rather than using `new Tempo(..)`.\n */\n get #Tempo() { return this.constructor; }\n /** time duration until another date-time */ until(optsOrDate, optsOrUntil) { return this.#until(optsOrDate, optsOrUntil); }\n /** time elapsed since another date-time */ since(optsOrDate, optsOrUntil) { return this.#since(optsOrDate, optsOrUntil); }\n /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt) { return this.#format(fmt); }\n /** returns a new `Tempo` with specific duration added. */ add(tempo, options) { return this.#add(tempo, options); }\n /** returns a new `Tempo` with specific offsets. */ set(tempo, options) { return this.#set(tempo, options); }\n /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config); }\n /** returns the underlying Temporal.ZonedDateTime */ toDateTime() { return this.#zdt ?? this.#anchor ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone); }\n /** returns a Temporal.PlainDate representation */ toPlainDate() { return this.toDateTime().toPlainDate(); }\n /** returns a Temporal.PlainTime representation */ toPlainTime() { return this.toDateTime().toPlainTime(); }\n /** returns a Temporal.PlainDateTime representation */ toPlainDateTime() { return this.toDateTime().toPlainDateTime(); }\n /** returns the underlying Temporal.Instant */ toInstant() { return this.toDateTime().toInstant(); }\n /** the date-time as a standard `Date` object. */ toDate() { return new Date(this.toDateTime().round({ smallestUnit: enums.ELEMENT.ms }).epochMilliseconds); }\n /** the ISO8601 string representation of the date-time. */ toString() { return this.toPlainDateTime().toString({ calendarName: 'never' }); }\n /** Custom JSON serialization for `JSON.stringify`. */ toJSON() { return omit({ ...this.#local.config, value: this.toString() }, 'scope', 'store'); }\n /** `true` if the underlying date-time is valid. */ isValid() { return !isEmpty(this); }\n // #endregion Instance public methods\n // #region Instance private methods~~~~~~~~~~~~~~~~~~~~~~~\n /** setup local 'config' and 'parse' rules (prototype-linked to global) */\n #setLocal(options) {\n // setup local config (prototype-linked to global config)\n this.#local.config = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).config);\n Object.assign(this.#local.config, { scope: 'local' });\n // setup local parse rules (prototype-linked to global parse)\n this.#local.parse = Object.create(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse);\n this.#local.parse.result = [];\n __classPrivateFieldGet(Tempo, _classThis, \"m\", _Tempo_setConfig).call(Tempo, this.#local, options); // set #local config\n }\n /** parse DateTime input */\n #parse(tempo, dateTime) {\n const today = (dateTime ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone))\n .withTimeZone(this.#local.config.timeZone);\n const { type, value } = this.#conform(tempo, today, isDefined(dateTime));\n // evaluate latest timezone / calendar (after #conform which might have updated them)\n const { timeZone, calendar } = this.#local.config;\n const tz = isString(timeZone) ? timeZone : timeZone.id ?? timeZone.timeZoneId;\n const cal = isString(calendar) ? calendar : calendar.id ?? calendar.calendarId;\n if (isEmpty(this.#local.parse.result) && isUndefined(__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending))) // #conform() didn't find any matches\n this.#local.parse.result = [{ type, value }];\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'parse', `{type: ${type}, value: ${value}}`); // show what we're parsing\n switch (type) {\n case 'Null':\n case 'Void':\n case 'Empty':\n case 'Undefined':\n return today;\n case 'String': // String which didn't conform to a Tempo.pattern\n try {\n const str = value.replace(/Z$/, ''); // requested Z-stripping for adoption\n const zdt = Temporal.ZonedDateTime.from(str.includes('[') ? str : `${str}[${tz}]`);\n if (this.#local)\n this.#local.config.timeZone = zdt.timeZoneId;\n return zdt;\n }\n catch (err) { // else see if Date.parse can parse value\n this.#result({ type: 'String', value }, { match: 'Date.parse' });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, 'Cannot detect DateTime; fallback to Date.parse');\n if (Match.date.test(value)) {\n try {\n return Temporal.PlainDate.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback */ }\n }\n try {\n return Temporal.PlainDateTime.from(value).toZonedDateTime(tz).withCalendar(cal);\n }\n catch { /* ignore and fallback to Date.parse */ }\n const date = new Date(value.toString());\n if (isNaN(date.getTime()))\n return __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot parse Date: \"${value}\"`);\n return Temporal.ZonedDateTime // adopt instance timezone\n .from(`${date.toISOString().substring(0, 23)}[${tz}]`)\n .withCalendar(cal);\n }\n case 'Temporal.ZonedDateTime': // ZonedDateTime object: convert to instance timezone\n return (value.timeZoneId === tz && value.calendarId === cal)\n ? value\n : value.withTimeZone(tz).withCalendar(cal);\n case 'Temporal.PlainDate':\n case 'Temporal.PlainDateTime':\n return value\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainTime':\n return today.withPlainTime(value);\n case 'Temporal.PlainYearMonth': // assume current day, else end-of-month\n return value\n .toPlainDate({ day: Math.min(today.day, value.daysInMonth) })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.PlainMonthDay': // assume current year\n return value\n .toPlainDate({ year: today.year })\n .toZonedDateTime(tz)\n .withCalendar(cal);\n case 'Temporal.Instant':\n return value\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Tempo':\n return value\n .toDateTime()\n .withTimeZone(tz)\n .withCalendar(cal); // apply instance timezone to cloned Tempo\n case 'Date':\n return Temporal.Instant.fromEpochMilliseconds(value.getTime())\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'Number': // Number which didn't conform to a Tempo.pattern\n const [seconds = BigInt(0), suffix = BigInt(0)] = value.toString().split('.').map(BigInt);\n const nano = BigInt(suffix.toString().substring(0, 9).padEnd(9, '0'));\n return Temporal.Instant.fromEpochNanoseconds(seconds * BigInt(1_000_000_000) + nano)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n case 'BigInt': // BigInt is not conformed against a Tempo.pattern\n return Temporal.Instant.fromEpochNanoseconds(value)\n .toZonedDateTimeISO(tz)\n .withCalendar(cal);\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected Tempo parameter type: ${type}, ${String(value)}`);\n return today;\n }\n }\n /** resolve constructor / method arguments */\n #swap(tempo, options = {}) {\n return this.#isOptions(tempo)\n ? [tempo.value, { ...tempo }]\n : [tempo, { ...options }];\n }\n /** check if we've been given a Tempo Options object */\n #isOptions(arg) {\n if (!isObject(arg) || arg.constructor !== Object)\n return false;\n const keys = ownKeys(arg); // if it contains any 'mutation' keys, then it's not (just) an options object\n if (keys.some(key => enums.MUTATION.has(key)))\n return false;\n return keys\n .some(key => enums.OPTION.has(key));\n }\n /** check if we've been given a ZonedDateTimeLike object */\n #isZonedDateTimeLike(tempo) {\n if (!isObject(tempo) || isEmpty(tempo))\n return false;\n // if it contains any 'options' keys, it's not a ZonedDateTime\n const keys = ownKeys(tempo);\n if (keys.some(key => enums.OPTION.has(key) && key !== 'value'))\n return false;\n // we include {value} to allow for Tempo instances\n return keys\n .filter(isString)\n .every((key) => enums.ZONED_DATE_TIME.has(key));\n }\n #result(...rest) {\n const match = Object.assign({}, ...rest); // collect all object arguments\n if (!isEmpty(match.groups)) {\n if (isDefined(this.#anchor) && !match.isAnchored)\n match.isAnchored = true;\n (__classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_pending) ?? this.#local.parse.result).push(match);\n }\n }\n /** evaluate 'string | number' input against known patterns */\n #conform(tempo, dateTime, isAnchored = false) {\n const arg = asType(tempo);\n const { type, value } = arg;\n if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property)\n const { timeZone, calendar, value, ...options } = tempo;\n let zdt = !isEmpty(options)\n ? dateTime.with(options)\n : dateTime;\n if (timeZone)\n zdt = zdt.withTimeZone(timeZone); // optionally set timeZone\n if (calendar)\n zdt = zdt.withCalendar(calendar); // optionally set calendar\n this.#result({ type: 'Temporal.ZonedDateTimeLike', value: zdt, match: 'Temporal.ZonedDateTimeLike' });\n return Object.assign(arg, {\n type: 'Temporal.ZonedDateTime', // override {arg.type}\n value: zdt,\n });\n }\n if (type !== 'String' && type !== 'Number') {\n this.#result(arg, { match: type });\n return arg;\n }\n if (isFunction(value)) {\n const res = value.call(this);\n return this.#conform(res, dateTime, isAnchored);\n }\n const trim = trimAll(value);\n if (type === 'String') { // if original value is String\n if (isEmpty(trim)) { // don't conform empty string\n this.#result(arg, { match: 'Empty' });\n return Object.assign(arg, { type: 'Empty' });\n }\n if (isIntegerLike(trim)) { // if string representation of BigInt literal\n this.#result(arg, { match: 'BigInt' });\n return Object.assign(arg, { type: 'BigInt', value: asInteger(trim) });\n }\n }\n else { // else it is a Number\n if (trim.length <= 7) { // cannot reliably interpret small numbers: might be {ss} or {yymmdd} or {dmmyyyy}\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, 'Cannot safely interpret number with less than 8-digits: use string instead');\n return arg;\n }\n }\n // const isSimpleIsoOrNumeric = typeof value === 'string' && (Match.date.test(value) || /^\\d+$/.test(value));\n const map = this.#local.parse.pattern;\n for (const [sym, pat] of map) {\n const groups = this.#parseMatch(pat, trim); // determine pattern-match groups\n if (isEmpty(groups))\n continue; // no match, so skip this iteration\n this.#result(arg, { match: sym.description, groups: cleanify(groups) }); // stash the {key} of the pattern that was matched\n dateTime = this.#parseZone(groups, dateTime); // resolve timezone early so events can use it\n dateTime = this.#parseGroups(groups, dateTime); // mutate the {groups} object (resolves events/periods)\n dateTime = this.#parseWeekday(groups, dateTime); // if {weekDay} pattern, calculate a calendar value\n dateTime = this.#parseDate(groups, dateTime); // if {calendar}|{event} pattern, translate to date value\n dateTime = this.#parseTime(groups, dateTime); // if {clock}|{period} pattern, translate to a time value\n /**\n * finished analyzing a matched pattern.\n * rebuild {arg.value} into a ZonedDateTime\n */\n // if no time-components were matched, strip time to midnight baseline\n if (!isAnchored && !['hh', 'mi', 'ss', 'ff', 'mer', 'per'].some(key => isDefined(groups[key])))\n dateTime = dateTime.withPlainTime('00:00:00');\n Object.assign(arg, { type: 'Temporal.ZonedDateTime', value: dateTime });\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'groups', groups); // show the resolved date-time elements\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).info(this.#local.config, 'pattern', sym.description); // show the pattern that was matched\n break; // stop checking patterns\n }\n return arg;\n }\n /** apply a regex-match against a value, and clean the result */\n #parseMatch(pat, value) {\n const groups = value.toString().match(pat)?.groups || {};\n ownEntries(groups) // remove undefined, NaN, null and empty values\n .forEach(([key, val]) => isEmpty(val) && delete groups[key]);\n return groups;\n }\n /** resolve {event} | {period} to their date | time values (mutates groups) */\n #parseGroups(groups, dateTime) {\n this.#anchor = dateTime; // temporarily anchor the instance so events resolve relative to current state\n try {\n for (const key of ownKeys(groups)) {\n const isEvent = Match.event.test(key);\n const isPeriod = Match.period.test(key);\n if (!isEvent && !isPeriod)\n continue;\n const idx = +key.substring(4);\n const src = key.startsWith('g') ? (isEvent ? __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.event : __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_global).parse.period) : (isEvent ? this.#local.parse.event : this.#local.parse.period);\n const entry = ownEntries(src, true)[idx];\n if (!entry)\n continue;\n const definition = entry[1];\n const res = isFunction(definition) ? definition.call(this).toString() : definition;\n const resGroups = isEvent ? this.#parseEvent(res) : this.#parsePeriod(res);\n Object.assign(groups, resGroups);\n delete groups[key];\n }\n }\n finally {\n this.#anchor = undefined; // reset anchor\n }\n // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date)\n if (isDefined(groups[\"mm\"]) && !isNumeric(groups[\"mm\"])) {\n const mm = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, groups[\"mm\"]); // conform month-name\n groups[\"mm\"] = Tempo.MONTH.keys().findIndex((el) => el === mm).toString().padStart(2, '0');\n }\n // Apply mutated groups to dateTime\n if (isDefined(groups.yy) || isDefined(groups.mm) || isDefined(groups.dd))\n dateTime = this.#parseDate(groups, dateTime);\n if (isDefined(groups.hh) || isDefined(groups.mi) || isDefined(groups.ss) || isDefined(groups.ff) || isDefined(groups.mer))\n dateTime = this.#parseTime(groups, dateTime);\n return dateTime;\n }\n /**\n * We expect similar offset-logic to apply to 'modifiers' when parsing a string DateTime.\n * returns {adjust} to make, based on {modifier}, {offset}, and {period}\n * -\t\t\tprevious period\n * +\t\t\tnext period\n * -3\t\t\tthree periods ago\n * <\t\t\tprior to base-date (asIs)\n * <=\t\t\tprior to base-date (plus one)\n */\n #parseModifier({ mod, adjust, offset, period }) {\n adjust = Math.abs(adjust);\n switch (mod) {\n case void 0: // no adjustment\n case '=':\n case 'this': // current period\n return 0;\n case '+': // next period\n case 'next':\n return adjust;\n case '-': // previous period\n case 'prev':\n case 'last':\n return -adjust;\n case '<': // period before base-date\n case 'ago':\n return (period <= offset)\n ? -adjust\n : -(adjust - 1);\n case '<=': // period before or including base-date\n case '-=':\n return (period < offset)\n ? -adjust\n : -(adjust - 1);\n case '>': // period strictly after base-date\n case 'hence':\n return (period >= offset)\n ? adjust\n : (adjust - 1);\n case '>=': // period after or including base-date\n case '+=':\n return (period > offset)\n ? adjust\n : (adjust - 1);\n default: // unexpected modifier\n return 0;\n }\n }\n /**\n * if named-group 'wkd' detected (with optional 'mod', 'nbr', 'sfx' or time-units), then calc relative weekday offset\n * | Example | Result | Note |\n * | :--- | :---- | :---- |\n * | `Wed` | Wed this week | might be earlier or later or equal to current day |\n * | `-Wed` | Wed last week | same as new Tempo('Wed').add({ weeks: -1 }) |\n * | `+Wed` | Wed next week | same as new Tempo('Wed').add({ weeks: 1 }) |\n * | `-3Wed` | Wed three weeks ago | same as new Tempo('Wed').add({ weeks: -3 }) |\n * | `', hh: '10', mer: 'pm'}\n * we early-exit if we find anything other than time-units\n */\n const time = ['hh', 'mi', 'ss', 'ms', 'us', 'ns', 'ff', 'mer'];\n if (!ownKeys(rest)\n .every(key => time.includes(key))) // non 'time-unit' keys detected\n return dateTime; // this is not a true {weekDay} pattern, so early-exit\n if (!isEmpty(mod) && !isEmpty(sfx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${sfx}'`);\n return dateTime; // cannot provide both 'modifier' and 'suffix'\n }\n const weekday = __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_prefix).call(Tempo, wkd); // conform weekday-name\n const adjust = +nbr; // how many weeks to adjust\n const offset = Tempo.WEEKDAY.keys() // how far weekday is from today\n .findIndex((el) => el === weekday);\n const days = offset - dateTime.dayOfWeek // number of days to offset from dateTime\n + (this.#parseModifier({ mod: mod ?? sfx, adjust, offset, period: dateTime.dayOfWeek }) * dateTime.daysInWeek);\n delete groups[\"wkd\"];\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"sfx\"];\n return dateTime\n .add({ days }); // set new {day}\n }\n /**\n * match input against date patterns\n * @returns adjusted ZonedDateTime with resolved time-components\n */\n #parseDate(groups, dateTime) {\n const { mod, nbr = '1', afx, unt, yy, mm, dd } = groups;\n if (isEmpty(yy) && isEmpty(mm) && isEmpty(dd) && isUndefined(unt))\n return dateTime; // return default\n if (!isEmpty(mod) && !isEmpty(afx)) {\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${afx}'`);\n return dateTime;\n }\n let { year, month, day } = this.#num({\n year: yy ?? dateTime.year, // supplied year, else current year\n month: mm ?? dateTime.month, // supplied month, else current month\n day: dd ?? dateTime.day, // supplied day, else current day\n });\n // handle {unt} relative offset (e.g. '2 days ago')\n if (unt) {\n const adjust = +nbr;\n const direction = (mod === '<' || mod === '-' || afx === 'ago') ? -1 : 1;\n const plural = singular(unt) + 's';\n dateTime = dateTime.add({ [plural]: adjust * direction });\n delete groups[\"unt\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n delete groups[\"mod\"];\n return dateTime;\n }\n // convert 2-digit year to 4-digits using 'pivot-year' (relative to current century)\n if (year.toString().match(Match.twoDigit)) { // if {year} match just-two digits\n const pivot = dateTime\n .subtract({ years: this.#local.parse[\"pivot\"] }) // pivot cutoff to determine century\n .year % 100; // remainder \n const century = Math.trunc(dateTime.year / 100); // current century\n year += (century - Number(year >= pivot)) * 100; // now a four-digit year\n }\n // adjust the {year} if a Modifier is present\n const adjust = +nbr; // how many years to adjust\n const offset = Number(pad(month) + '.' + pad(day)); // the event month.day\n const period = Number(pad(dateTime.month) + '.' + pad(dateTime.day + 1));\n year += this.#parseModifier({ mod: mod ?? afx, adjust, offset, period });\n Object.assign(groups, { yy: year, mm: month, dd: day });\n delete groups[\"mod\"];\n delete groups[\"nbr\"];\n delete groups[\"afx\"];\n // all date-components are now set; check for overflow in case past end-of-month\n return Temporal.PlainDate.from({ year, month, day }, { overflow: 'constrain' })\n .toZonedDateTime(dateTime.timeZoneId) // adjust to constrained date\n .withPlainTime(dateTime.toPlainTime()); // restore the time\n }\n /** match input against 'tm' pattern (returns adjusted ZonedDateTime) */\n #parseTime(groups = {}, dateTime) {\n if (isUndefined(groups[\"hh\"])) // must contain 'time' with at least {hh}\n return dateTime;\n let { hh = 0, mi = 0, ss = 0, ms = 0, us = 0, ns = 0 } = this.#num(groups);\n if (hh >= 24) {\n dateTime = dateTime.add({ days: Math.trunc(hh / 24) }); // move the date forward number of days to offset\t\t\t\t\t\t\t\t\n hh %= 24; // midnight is '00:00' on the next-day\n }\n if (isDefined(groups[\"ff\"])) { // {ff} is fractional seconds and overrides {ms|us|ns}\n const ff = groups[\"ff\"].substring(0, 9).padEnd(9, '0');\n ms = +ff.substring(0, 3);\n us = +ff.substring(3, 6);\n ns = +ff.substring(6, 9);\n }\n if (groups[\"mer\"]?.toLowerCase() === 'pm' && hh < 12 && (hh + mi + ss + ms + us + ns) > 0)\n hh += 12; // anything after midnight and before midday\n if (groups[\"mer\"]?.toLowerCase() === 'am' && hh >= 12)\n hh -= 12; // anything after midday\n return dateTime // return the computed time-values\n .withPlainTime({ hour: hh, minute: mi, second: ss, millisecond: ms, microsecond: us, nanosecond: ns });\n }\n /**\n * apply a timezone or calendar bracket to the current ZonedDateTime\n * normalization is applied to ensure 'Z' is treated as 'UTC'\n */\n #parseZone(groups, dateTime) {\n const tzd = groups[\"tzd\"]?.replace(Match.zed, 'UTC'); // normalize timezone/offset\n const brk = groups[\"brk\"]?.replace(Match.zed, 'UTC'); // handle bracketed timezone\n const zone = brk || tzd;\n if (zone && zone !== dateTime.timeZoneId && !zone.startsWith('u-ca=')) {\n if (this.#local)\n this.#local.config.timeZone = zone; // update local config if exists\n dateTime = dateTime.toPlainDateTime().toZonedDateTime(zone); // adopt timezone override (stable)\n }\n const cal = groups[\"cal\"];\n if (cal && cal !== dateTime.calendarId) {\n const calendar = cal.startsWith('u-ca=') ? cal.substring(5) : cal;\n this.#local.config.calendar = calendar;\n dateTime = dateTime.withCalendar(calendar);\n }\n delete groups[\"brk\"];\n delete groups[\"cal\"];\n delete groups[\"tzd\"];\n return dateTime;\n }\n /** match an {event} string against a date pattern */\n #parseEvent(evt) {\n const groups = {};\n const pats = this.#local.parse.isMonthDay // first find out if we have a US-format timeZone\n ? ['mdy', 'dmy', 'ymd'] // if so, try {mdy} before {dmy}\n : ['dmy', 'mdy', 'ymd']; // else try {dmy} before {mdy}\n for (const pat of pats) {\n const reg = this.#getPattern(pat);\n if (isDefined(reg)) {\n const match = this.#parseMatch(reg, evt);\n if (!isEmpty(match)) {\n this.#result({ type: 'Event', value: evt, match: pat, groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n if (!isEmpty(groups))\n break; // return on the first matched pattern\n }\n return groups; // overlay the match date-components\n }\n /** match a {period} string against the time pattern */\n #parsePeriod(per) {\n const groups = {};\n const tm = this.#getPattern('tm'); // get the RegExp for the time-pattern\n if (isDefined(tm)) {\n const match = this.#parseMatch(tm, per);\n if (!isEmpty(match)) {\n this.#result({ type: 'Period', value: per, match: 'tm', groups: cleanify(match) });\n Object.assign(groups, match);\n }\n }\n return groups;\n }\n /** lookup the RegExp for a given pattern name */\n #getPattern(pat) {\n const reg = this.#local.parse.pattern.get(Tempo.getSymbol(pat));\n if (isUndefined(reg))\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Cannot find pattern: \"${pat}\"`);\n return reg;\n }\n /** return a new object, with only numeric values */\n #num = (groups) => {\n return ownEntries(groups)\n .reduce((acc, [key, val]) => {\n if (isNumeric(val))\n acc[key] = asNumber(val);\n return acc;\n }, {});\n };\n /** mutate the date-time by adding a duration */\n #add = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n const mutate = 'add';\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [unit, offset]) => {\n if (unit === 'timeZone' || unit === 'calendar')\n return zdt;\n const single = singular(unit);\n const plural = single + 's';\n switch (`${mutate}.${single}`) {\n case 'add.year':\n case 'add.month':\n case 'add.week':\n case 'add.day':\n case 'add.hour':\n case 'add.minute':\n case 'add.second':\n case 'add.millisecond':\n case 'add.microsecond':\n case 'add.nanosecond':\n return zdt\n .add({ [plural]: offset });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`);\n return zdt;\n }\n }, zdt);\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n /** mutate the date-time by setting specific offsets */\n #set = (args, options = {}) => {\n var _b;\n const tz = options.timeZone ?? this.tz;\n let zdt = this.#zdt.withTimeZone(tz);\n const overrides = {\n timeZone: tz,\n calendar: this.#zdt.calendarId\n };\n __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, \"f\", _Tempo_pending) ?? [...this.#local.parse.result], \"f\", _Tempo_pending); // collected parse-results so-far\n if (isDefined(args)) {\n if (isObject(args) && args.constructor === Object) {\n if (args.timeZone)\n overrides.timeZone = args.timeZone;\n if (args.calendar)\n overrides.calendar = args.calendar;\n zdt = Object.entries(args ?? {}) // loop through each mutation\n .reduce((zdt, [key, adjust]) => {\n if (key === 'timeZone' || key === 'calendar')\n return zdt;\n const { mutate, offset, single } = ((key) => {\n switch (key) {\n case 'start':\n case 'mid':\n case 'end':\n return { mutate: key, offset: 0, single: singular(adjust?.toString() ?? '') };\n default:\n return { mutate: 'set', offset: adjust, single: singular(key) };\n }\n })(key); // IIFE to analyze arguments\n switch (`${mutate}.${single}`) {\n case 'set.timeZone':\n return zdt.withTimeZone(offset);\n case 'set.calendar':\n return zdt.withCalendar(offset);\n case 'set.period':\n case 'set.time':\n case 'set.date':\n case 'set.event':\n case 'set.dow': // set day-of-week by number\n case 'set.wkd': // set day-of-week by name\n return this.#parse(offset, zdt);\n case 'set.year':\n case 'set.month':\n // case 'set.week':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.day':\n case 'set.hour':\n case 'set.minute':\n case 'set.second':\n case 'set.millisecond':\n case 'set.microsecond':\n case 'set.nanosecond':\n return zdt\n .with({ [single]: offset });\n case 'set.yy':\n case 'set.mm':\n // case 'set.ww':\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// not defined\n case 'set.dd':\n case 'set.hh':\n case 'set.mi':\n case 'set.ss':\n case 'set.ms':\n case 'set.us':\n case 'set.ns':\n const value = Tempo.ELEMENT[single];\n return zdt\n .with({ [value]: offset });\n case 'start.year':\n return zdt\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay();\n case 'start.term': // TODO\n return zdt;\n case 'start.month':\n return zdt\n .with({ day: 1 })\n .startOfDay();\n case 'start.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) })\n .startOfDay();\n case 'start.day':\n return zdt\n .startOfDay();\n case 'start.hour':\n case 'start.minute':\n case 'start.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'trunc' });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'mid.year':\n return zdt\n .with({ month: Tempo.MONTH.Jul, day: 1 })\n .startOfDay();\n case 'mid.term': // TODO: relevant?\n return zdt;\n case 'mid.month':\n return zdt\n .with({ day: Math.trunc(zdt.daysInMonth / 2) })\n .startOfDay();\n case 'mid.week':\n return zdt\n .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) })\n .startOfDay();\n case 'mid.day':\n return zdt\n .round({ smallestUnit: 'day', roundingMode: 'trunc' })\n .add({ hours: 12 });\n case 'mid.hour':\n return zdt\n .round({ smallestUnit: 'hour', roundingMode: 'trunc' })\n .add({ minutes: 30 });\n case 'mid.minute':\n return zdt\n .round({ smallestUnit: 'minute', roundingMode: 'trunc' })\n .add({ seconds: 30 });\n case 'mid.second':\n return zdt\n .round({ smallestUnit: 'second', roundingMode: 'trunc' })\n .add({ milliseconds: 500 });\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n case 'end.year':\n return zdt\n .add({ years: 1 })\n .with({ month: Tempo.MONTH.Jan, day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.term': // TODO\n return zdt\n .subtract({ nanoseconds: 1 });\n case 'end.month':\n return zdt\n .add({ months: 1 })\n .with({ day: 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.week':\n return zdt\n .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 })\n .startOfDay()\n .subtract({ nanoseconds: 1 });\n case 'end.day':\n case 'end.hour':\n case 'end.minute':\n case 'end.second':\n return zdt\n .round({ smallestUnit: offset, roundingMode: 'ceil' })\n .subtract({ nanoseconds: 1 });\n default:\n __classPrivateFieldGet(Tempo, _classThis, \"f\", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`);\n return zdt;\n }\n }, zdt); // start reduce with the shifted zonedDateTime\n }\n else {\n return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt });\n }\n }\n return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt });\n };\n #format = (fmt) => {\n if (isNull(this.#tempo))\n return undefined; // don't format dates\n const obj = this.#local.config.formats;\n let template = (isString(fmt) && obj.has(fmt))\n ? obj[fmt]\n : String(fmt);\n // auto-meridiem: if {HH} is present and {mer} is absent, append it after the last time component\n if (template.includes('{HH}') && !template.includes('{mer}') && !template.includes('{MER}')) {\n const index = Math.max(template.lastIndexOf('{HH}'), template.lastIndexOf('{mi}'), template.lastIndexOf('{ss}'));\n if (index !== -1) {\n const end = template.indexOf('}', index) + 1;\n template = template.slice(0, end) + '{mer}' + template.slice(end);\n }\n }\n const result = template.replace(Match.braces, (_match, token) => {\n switch (token) {\n case 'wy': return pad(this.wy, 4);\n case 'yyww': return pad(this.wy, 4) + pad(this.ww);\n case 'yyyy': return pad(this.yy, 4);\n case 'yy': return pad(this.yy % 100);\n case 'mon': return this.mon;\n case 'mmm': return this.mmm;\n case 'mm': return pad(this.mm);\n case 'dd': return pad(this.dd);\n case 'day': return this.day.toString();\n case 'dow': return this.dow.toString();\n case 'wkd': return this.wkd;\n case 'www': return this.www;\n case 'ww': return pad(this.ww);\n case 'hh': return pad(this.hh);\n case 'HH': return pad(this.hh > 12 ? this.hh % 12 : this.hh || 12);\n case 'mer': return this.hh >= 12 ? 'pm' : 'am';\n case 'MER': return this.hh >= 12 ? 'PM' : 'AM';\n case 'mi': return pad(this.mi);\n case 'ss': return pad(this.ss);\n case 'ms': return pad(this.ms, 3);\n case 'us': return pad(this.us, 3);\n case 'ns': return pad(this.ns, 3);\n case 'ff': return `${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`;\n case 'hhmiss': return `${pad(this.hh)}${pad(this.mi)}${pad(this.ss)}`;\n case 'ts': return this.ts.toString();\n case 'nano': return this.nano.toString();\n case 'tz': return this.tz;\n default: {\n return token.startsWith('term.')\n ? stringify(this.term[token.slice(5)])\n : `{${token}}`; // unknown format-code, return as-is\n }\n }\n });\n const isExplicitlyNumeric = ['{yyyy}{ww}', '{yyyy}{mm}', '{yyyy}{mm}{dd}', '{yyww}', '{wy}{ww}', '{wy}'].includes(template);\n return (isExplicitlyNumeric ? ifNumeric(result) : result);\n };\n #until(arg, until = {}, since = false) {\n let value, opts = {}, unit;\n switch (true) {\n case isString(arg) && Tempo.ELEMENT.includes(singular(arg)):\n unit = arg; // e.g. tempo.until('hours')\n ({ value, ...opts } = until);\n break;\n case isString(arg): // assume 'arg' is a dateTime string\n value = arg; // e.g. tempo.until('20-May-1957', {unit: 'years'})\n if (isObject(until))\n ({ unit, ...opts } = until);\n else\n unit = until; // assume the 'until' arg is a 'unit' string\n break;\n case isObject(arg) && isString(until): // assume 'until' is a Unit\n unit = until; // e.g. tempo.until({value:'20-May-1957}, 'years'})\n ({ value, ...opts } = arg);\n break;\n case isObject(arg) && isObject(until): // assume combination of Tempo.Options and Tempo.Until\n ({ value, unit, ...opts } = Object.assign({}, arg, until));\n break;\n case isString(until):\n unit = until;\n value = arg;\n break;\n case isObject(until):\n unit = until.unit;\n value = arg;\n break;\n default:\n value = arg; // assume 'arg' is a DateTime\n }\n const offset = new this.#Tempo(value, opts); // create the offset Tempo\n const diffZone = this.#zdt.timeZoneId !== offset.#zdt.timeZoneId;\n // Temporal restricts cross-timezone math to absolute units ('hours') to avoid DST ambiguity\n const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') });\n if (isDefined(unit))\n unit = `${singular(unit)}s`; // coerce to plural\n if (isUndefined(unit) || since) {\n const res = getAccessors(duration)\n .reduce((acc, dur) => Object.assign(acc, ifDefined({ [dur]: duration[dur] })), {});\n return Object.assign(res, { iso: duration.toString(), unit });\n }\n return duration.total({ relativeTo: this.#zdt, unit });\n }\n /** format the elapsed time between two Tempos (to nanosecond) */\n #since(arg, until = {}) {\n const dur = this.#until(arg, until, true); // get a Tempo.Duration object\n const date = [dur.years, dur.months, dur.days];\n const time = [dur.hours, dur.minutes, dur.seconds];\n const fraction = [dur.milliseconds, dur.microseconds, dur.nanoseconds]\n .map(Math.abs)\n .map(nbr => nbr.toString().padStart(3, '0'))\n .join('');\n const rtf = new Intl.RelativeTimeFormat(this.#local.config['locale'], { style: 'narrow' });\n switch (dur.unit) {\n case 'years':\n return rtf.format(date[0], 'years');\n case 'months':\n return rtf.format(date[1], 'months');\n case 'weeks':\n return rtf.format(date[1], 'weeks');\n case 'days':\n return rtf.format(date[2], 'days');\n case 'hours':\n return rtf.format(time[0], 'hours');\n case 'minutes':\n return rtf.format(time[1], 'minutes');\n case 'seconds':\n return rtf.format(time[2], 'seconds');\n case 'milliseconds':\n case 'microseconds':\n case 'nanoseconds':\n return `${fraction}`;\n default:\n return dur.iso;\n }\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Tempo = _classThis;\n})();\nexport { Tempo };\n// #endregion Namespace\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nTempo.init(); // initialize default global configuration\n// shortcut functions to common Tempo properties / methods\n/** check valid Tempo */ export const isTempo = (tempo) => isType(tempo, 'Tempo');\n/** current timestamp (ts) */ export const getStamp = ((tempo, options) => new Tempo(tempo, options).ts);\n/** create new Tempo */ export const getTempo = ((tempo, options) => new Tempo(tempo, options));\n/** format a Tempo */ export const fmtTempo = ((fmt, tempo, options) => new Tempo(tempo, options).format(fmt));\n//# sourceMappingURL=tempo.class.js.map","import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from \"tslib\";\nimport { Logify } from '#library/logify.class.js';\nimport { asArray } from '#library/coercion.library.js';\nimport { sprintf } from '#library/string.library.js';\nimport { ifDefined } from '#library/object.library.js';\nimport { secure } from '#library/utility.library.js';\nimport { cleanify } from '#library/serialize.library.js';\nimport { Immutable } from '#library/class.library.js';\nimport { isEmpty, isObject } from '#library/type.library.js';\n/**\n * Wrap a Promise's resolve/reject/finally methods for later fulfilment.\n * with useful methods for tracking the state of the Promise, chaining fulfilment, etc.\n ```\n new Pledge({tag: string, onResolve?: () => void, onReject?: () => void, onSettle?: () => void})\n new Pledge(tag?: string)\n ```\n */\nlet Pledge = (() => {\n var _Pledge_static;\n let _classDecorators = [Immutable];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n var Pledge = class {\n static { _classThis = this; }\n static { __setFunctionName(this, \"Pledge\"); }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n Pledge = _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n #pledge;\n #status = {};\n #dbg;\n static {\n _Pledge_static = { value: {} };\n }\n static STATE = secure({\n Pending: Symbol('pending'),\n Resolved: Symbol('resolved'),\n Rejected: Symbol('rejected')\n });\n /** initialize future Pledge instances */\n static init(arg) {\n if (isObject(arg)) {\n if (isEmpty(arg))\n __classPrivateFieldSet(Pledge, _classThis, {}, \"f\", _Pledge_static); // reset static values\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }), ifDefined({ onResolve: arg.onResolve, onReject: arg.onReject, onSettle: arg.onSettle, }));\n }\n else {\n Object.assign(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static), ifDefined({ tag: arg, }));\n }\n if (__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug)\n console.log('Pledge: ', __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static)); // debug\n return Pledge.status;\n }\n /** reset static defaults */\n static [Symbol.dispose]() { Pledge.init({}); }\n static get status() {\n return __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static);\n }\n /** use catch:boolean to determine whether to throw or return */\n #catch(...msg) {\n if (this.status.catch) {\n this.#dbg.warn(...msg); // catch, but warn {error}\n return;\n }\n this.#dbg.error(...msg); // assume {error}\n throw new Error(sprintf('pledge: ', ...msg));\n }\n constructor(arg) {\n this.#pledge = Promise.withResolvers();\n this.#status = { state: Pledge.STATE.Pending, ...__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static) };\n if (isObject(arg)) {\n this.#dbg = new Logify({ debug: arg.debug, catch: arg.catch });\n Object.assign(this.#status, ifDefined({ tag: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, debug: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).debug, catch: __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).catch }), ifDefined({ tag: arg.tag, debug: arg.debug, catch: arg.catch, }));\n const onResolve = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onResolve).concat(asArray(arg.onResolve));\n const onReject = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onReject).concat(asArray(arg.onReject));\n const onSettle = asArray(__classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).onSettle).concat(asArray(arg.onSettle));\n if (onResolve.length)\n this.#pledge.promise.then(val => onResolve.forEach(cb => cb(val)));\n if (onReject.length)\n this.#pledge.promise.catch(err => onReject.forEach(cb => cb(err)));\n if (onSettle.length)\n this.#pledge.promise.finally(() => onSettle.forEach(cb => cb()));\n if (this.#status.catch)\n this.#pledge.promise.catch(err => this.#catch(this.#status, err));\n }\n else {\n this.#dbg = new Logify();\n Object.assign(this.#status, ifDefined({ tag: arg ?? __classPrivateFieldGet(Pledge, _classThis, \"f\", _Pledge_static).tag, }));\n }\n this.#pledge.promise.catch(() => { }); // global catch-all to prevent unhandled rejections\n Object.freeze(this); // make this instance immutable\n }\n get [Symbol.toStringTag]() {\n return 'Pledge';\n }\n [Symbol.dispose]() {\n if (this.isPending)\n this.reject(new Error(`Pledge disposed`)); // discard pending Pledge (to notify wait-ers)\n }\n get status() {\n return cleanify(this.#status);\n }\n get promise() {\n return this.#pledge.promise;\n }\n get state() {\n return this.#status.state.description;\n }\n get isPending() {\n return this.#status.state === Pledge.STATE.Pending;\n }\n get isResolved() {\n return this.#status.state === Pledge.STATE.Resolved;\n }\n get isRejected() {\n return this.#status.state === Pledge.STATE.Rejected;\n }\n get isSettled() {\n return this.#status.state !== Pledge.STATE.Pending;\n }\n toString() {\n return JSON.stringify(this.status);\n }\n resolve(value) {\n if (this.isPending) {\n this.#status.settled = value;\n this.#status.state = Pledge.STATE.Resolved;\n this.#pledge.resolve(value); // resolve, then trigger any Pledge.onResolve, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n reject(error) {\n if (this.isPending) {\n this.#status.error = error;\n this.#status.state = Pledge.STATE.Rejected;\n this.#pledge.reject(error); // reject, then trigger any Pledge.onReject, then Pledge.onSettle\n }\n else\n this.#dbg.warn(this.#status, `Pledge was already ${this.state}`);\n return this.#pledge.promise;\n }\n then(fn) {\n }\n static {\n __runInitializers(_classThis, _classExtraInitializers);\n }\n };\n return Pledge = _classThis;\n})();\nexport { Pledge };\n//# sourceMappingURL=pledge.class.js.map"],"names":["isTempo","ranges","key","scope","description","define","qtr.key","qtr.scope","qtr.description","qtr.define","szn.key","szn.scope","szn.description","szn.define","zdc.key","zdc.scope","zdc.description","zdc.define","per.key","per.scope","per.description","per.define","enums.WEEKDAY","enums.WEEKDAYS","enums.MONTH","enums.MONTHS","enums.DURATION","enums.DURATIONS","enums.SEASON","enums.COMPASS","enums.ELEMENT","enums.LIMIT","enums.DISCOVERY","enums.PARSE","enums.FORMAT","enums.MUTATION","enums.OPTION","enums.ZONED_DATE_TIME"],"mappings":"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","x_google_ignoreList":[1]} \ No newline at end of file diff --git a/packages/tempo/dist/tempo.class.d.ts b/packages/tempo/dist/tempo.class.d.ts index 6826914e..986eee1e 100644 --- a/packages/tempo/dist/tempo.class.d.ts +++ b/packages/tempo/dist/tempo.class.d.ts @@ -1,9 +1,9 @@ -import '#core/temporal.polyfill.js'; -import type { IntRange, LooseUnion, NonOptional, Property, Plural, Type } from '#core/shared/type.library.js'; -import * as enums from '#core/tempo.config/tempo.enum.js'; -import { Token, Snippet, Layout, Event, Period } from '#core/tempo.config/tempo.default.js'; -import '#core/shared/prototype.library.js'; -declare module '#core/shared/type.library.js' { +import '#tempo/temporal.polyfill.js'; +import type { IntRange, LooseUnion, NonOptional, Property, Plural, Type } from '#library/type.library.js'; +import * as enums from '#tempo/tempo.config/tempo.enum.js'; +import { Token, Snippet, Layout, Event, Period } from '#tempo/tempo.config/tempo.default.js'; +import '#library/prototype.library.js'; +declare module '#library/type.library.js' { interface TypeValueMap { Tempo: { type: 'Tempo'; @@ -12,6 +12,11 @@ declare module '#core/shared/type.library.js' { } } /** key to use for storage / globalThis Symbol */ export declare const $Tempo: unique symbol; +declare global { + interface globalThis { + [$Tempo]?: Tempo.Discovery; + } +} /** * # Tempo * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. @@ -19,11 +24,11 @@ declare module '#core/shared/type.library.js' { */ export declare class Tempo { #private; - /** Weekday names (short-form) */ static get WEEKDAY(): import("#core/shared/enumerate.library.js").Enum.wrap>; - /** Weekday names (long-form) */ static get WEEKDAYS(): import("#core/shared/enumerate.library.js").Enum.wrap>; - /** Month names (short-form) */ static get MONTH(): import("#core/shared/enumerate.library.js").Enum.wrap>; - /** Month names (long-form) */ static get MONTHS(): import("#core/shared/enumerate.library.js").Enum.wrap>; - /** Time durations as seconds (singular) */ static get DURATION(): import("#core/shared/enumerate.library.js").Enum.wrap<{ + /** Weekday names (short-form) */ static get WEEKDAY(): import("#library/enumerate.library.js").Enum.wrap>; + /** Weekday names (long-form) */ static get WEEKDAYS(): import("#library/enumerate.library.js").Enum.wrap>; + /** Month names (short-form) */ static get MONTH(): import("#library/enumerate.library.js").Enum.wrap>; + /** Month names (long-form) */ static get MONTHS(): import("#library/enumerate.library.js").Enum.wrap>; + /** Time durations as seconds (singular) */ static get DURATION(): import("#library/enumerate.library.js").Enum.wrap<{ readonly year: 31536000; readonly month: 2628000; readonly week: 604800; @@ -35,7 +40,7 @@ export declare class Tempo { readonly microsecond: 0.000001; readonly nanosecond: 1e-9; }>; - /** Time durations as milliseconds (plural) */ static get DURATIONS(): import("#core/shared/enumerate.library.js").Enum.wrap<{ + /** Time durations as milliseconds (plural) */ static get DURATIONS(): import("#library/enumerate.library.js").Enum.wrap<{ readonly years: number; readonly months: number; readonly weeks: number; @@ -47,19 +52,19 @@ export declare class Tempo { readonly microseconds: number; readonly nanoseconds: number; }>; - /** Quarterly Seasons */ static get SEASON(): import("#core/shared/enumerate.library.js").Enum.wrap<{ + /** Quarterly Seasons */ static get SEASON(): import("#library/enumerate.library.js").Enum.wrap<{ readonly Summer: "summer"; readonly Autumn: "autumn"; readonly Winter: "winter"; readonly Spring: "spring"; }>; - /** Compass cardinal points */ static get COMPASS(): import("#core/shared/enumerate.library.js").Enum.wrap<{ + /** Compass cardinal points */ static get COMPASS(): import("#library/enumerate.library.js").Enum.wrap<{ readonly North: "north"; readonly East: "east"; readonly South: "south"; readonly West: "west"; }>; - /** Tempo to Temporal DateTime Units map */ static get ELEMENT(): import("#core/shared/enumerate.library.js").Enum.wrap<{ + /** Tempo to Temporal DateTime Units map */ static get ELEMENT(): import("#library/enumerate.library.js").Enum.wrap<{ readonly yy: "year"; readonly mm: "month"; readonly ww: "week"; @@ -72,35 +77,20 @@ export declare class Tempo { readonly ns: "nanosecond"; }>; /** Pre-configured format {name -> string} pairs */ static get FORMAT(): enums.FormatEnum; - /** some useful Dates */ static get LIMIT(): import("#core/shared/type.library.js").SecureObject<{ + /** some useful Dates */ static get LIMIT(): import("#library/type.library.js").SecureObject<{ readonly maxTempo: bigint; readonly minTempo: bigint; }>; /** - * Bootstrap the library with a Custom Global Discovery object. - * - * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern - * and automatically calls `Tempo.init()` to apply the discovered configuration. + * Unified loader for library extensions. * - * @param config - The Global Discovery object to register. - * @returns The resolved global configuration. + * @param arg - A `Plugin` function, a `TermPlugin` object (or array), or a `Discovery` object. + * @param options - Optional configuration for a standard `Plugin`. + * @returns The `Tempo` class for chaining. */ - static discover(config: Tempo.Discovery): { - [key: string]: any; - /** configuration (global | local) */ scope: "global" | "local"; - /** pre-configured format strings */ formats: Tempo.Format; - anchor: Temporal.ZonedDateTime; - timeZone: Temporal.TimeZoneLike; - store: string; - discovery: string; - debug: boolean | undefined; - catch: boolean | undefined; - calendar: Temporal.CalendarLike; - locale: string; - sphere: Tempo.COMPASS | undefined; - timeStamp: Tempo.TimeStamp; - plugins: Tempo.Plugin | Tempo.Plugin[]; - }; + static load(plugin: Tempo.Plugin, options?: any): typeof Tempo; + static load(term: Tempo.TermPlugin | Tempo.TermPlugin[]): typeof Tempo; + static load(config: Tempo.Discovery): typeof Tempo; /** * Initializes the global default configuration for all subsequent `Tempo` instances. * @@ -130,11 +120,6 @@ export declare class Tempo { }; /** release global config and reset library to defaults */ static [Symbol.dispose](): void; - /** - * Extends the Tempo class with new functionality. - * Plugins can add static or instance methods to the library. - */ - static extend(plugin: Tempo.Plugin, options?: any): typeof Tempo; /** Reads options from persistent storage (e.g., localStorage). */ static readStore(key?: string): Tempo.Options; /** Writes configuration into persistent storage. */ @@ -169,9 +154,9 @@ export declare class Tempo { * Useful for debugging how the final configuration is built. */ static get options(): { - default: import("#core/shared/type.library.js").SecureObject<{ + default: import("#library/type.library.js").SecureObject<{ readonly scope: "default"; - readonly timeZone: import("#core/shared/type.library.js").Extend<{ + readonly timeZone: import("#library/type.library.js").Extend<{ readonly utc: "UTC"; readonly gmt: "Europe/London"; readonly est: "America/New_York"; @@ -192,14 +177,14 @@ export declare class Tempo { readonly discovery?: string | undefined; readonly debug?: boolean | undefined; readonly catch?: boolean | undefined; - readonly calendar?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | undefined; + readonly calendar?: string | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | undefined; readonly locale?: string | undefined; readonly pivot?: number | undefined; readonly sphere?: Tempo.COMPASS | undefined; readonly timeStamp?: Tempo.TimeStamp | undefined; - readonly mdyLocales?: string | import("#core/shared/type.library.js").SecureArray | undefined; - readonly mdyLayouts?: import("#core/shared/type.library.js").SecureArray | undefined; - readonly snippet?: string | import("#core/shared/type.library.js").SecureObject | undefined; + readonly mdyLayouts?: import("#library/type.library.js").SecureArray | undefined; + readonly snippet?: string | import("#library/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; - readonly layout?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; + readonly layout?: string | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly event?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject any; readonly tomorrow: (this: any) => any; readonly yesterday: (this: any) => any; - }, string, string | Function>> | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; - readonly period?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; + readonly period?: Tempo.Logic | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly formats?: import("#core/shared/type.library.js").SecureObject> | undefined; - readonly plugins?: Tempo.Plugin | import("#core/shared/type.library.js").SecureArray | undefined; - readonly value?: string | number | bigint | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | null | undefined; - readonly anchor?: import("#core/shared/type.library.js").SecureObject | undefined; + readonly formats?: import("#library/type.library.js").SecureObject> | undefined; + readonly plugins?: Tempo.Plugin | import("#library/type.library.js").SecureArray | undefined; + readonly value?: string | number | bigint | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | null | undefined; + readonly anchor?: import("#library/type.library.js").SecureObject | undefined; }>; discovery: any; storage: { @@ -286,19 +271,17 @@ export declare class Tempo { static from(tempo: Tempo.DateTime | undefined, options?: Tempo.Options): Tempo; static now(): bigint; /** static Tempo.terms getter */ - static get terms(): import("#core/shared/type.library.js").SecureArray<{ + static get terms(): import("#library/type.library.js").SecureArray<{ key: string; scope?: string; description: string; }>; - /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ - static addTerm(...plugin: Tempo.TermPlugin[]): void; /** static Tempo properties getter */ - static get properties(): import("#core/shared/type.library.js").SecureArray; + static get properties(): import("#library/type.library.js").SecureArray; /** Tempo initial default settings */ - static get default(): import("#core/shared/type.library.js").SecureObject<{ + static get default(): import("#library/type.library.js").SecureObject<{ readonly scope: "default"; - readonly timeZone: import("#core/shared/type.library.js").Extend<{ + readonly timeZone: import("#library/type.library.js").Extend<{ readonly utc: "UTC"; readonly gmt: "Europe/London"; readonly est: "America/New_York"; @@ -319,14 +302,14 @@ export declare class Tempo { readonly discovery?: string | undefined; readonly debug?: boolean | undefined; readonly catch?: boolean | undefined; - readonly calendar?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | undefined; + readonly calendar?: string | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | undefined; readonly locale?: string | undefined; readonly pivot?: number | undefined; readonly sphere?: Tempo.COMPASS | undefined; readonly timeStamp?: Tempo.TimeStamp | undefined; - readonly mdyLocales?: string | import("#core/shared/type.library.js").SecureArray | undefined; - readonly mdyLayouts?: import("#core/shared/type.library.js").SecureArray | undefined; - readonly snippet?: string | import("#core/shared/type.library.js").SecureObject | undefined; + readonly mdyLayouts?: import("#library/type.library.js").SecureArray | undefined; + readonly snippet?: string | import("#library/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; - readonly layout?: string | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; + readonly layout?: string | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly event?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject any; readonly tomorrow: (this: any) => any; readonly yesterday: (this: any) => any; - }, string, string | Function>> | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | undefined; - readonly period?: Tempo.Logic | import("#core/shared/type.library.js").SecureObject> | import("#core/shared/type.library.js").SecureArray> | import("#core/shared/type.library.js").SecureObject> | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; + readonly period?: Tempo.Logic | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly formats?: import("#core/shared/type.library.js").SecureObject> | undefined; - readonly plugins?: Tempo.Plugin | import("#core/shared/type.library.js").SecureArray | undefined; - readonly value?: string | number | bigint | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | import("#core/shared/type.library.js").SecureObject | null | undefined; - readonly anchor?: import("#core/shared/type.library.js").SecureObject | undefined; + readonly formats?: import("#library/type.library.js").SecureObject> | undefined; + readonly plugins?: Tempo.Plugin | import("#library/type.library.js").SecureArray | undefined; + readonly value?: string | number | bigint | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject | null | undefined; + readonly anchor?: import("#library/type.library.js").SecureObject | undefined; }>; /** * configuration governing the static 'rules' used when parsing Tempo.DateTime argument @@ -395,7 +378,7 @@ export declare class Tempo { /** allow for auto-convert of Tempo to BigInt, Number or String */ [Symbol.toPrimitive](hint?: 'string' | 'number' | 'default'): string | number | bigint; /** iterate over instance formats */ - [Symbol.iterator](): ArrayIterator>; + [Symbol.iterator](): ArrayIterator>; get [Symbol.toStringTag](): string; /** * Instantiates a new `Tempo` object. @@ -446,7 +429,7 @@ export declare class Tempo { /** Instance-specific parse rules (merged with global) */ get parse(): Tempo.Parse; /** Object containing results from all term plugins */ get term(): Tempo.Terms; /** Formatted results for all pre-defined format codes */ get fmt(): enums.Formats; - /** units since epoch */ get epoch(): import("#core/shared/type.library.js").SecureObject<{ + /** units since epoch */ get epoch(): import("#library/type.library.js").SecureObject<{ /** seconds since epoch */ readonly ss: number; /** milliseconds since epoch */ readonly ms: number; /** microseconds since epoch */ readonly us: number; diff --git a/packages/tempo/dist/tempo.class.js b/packages/tempo/dist/tempo.class.js index d38ee1ca..e337fb4b 100644 --- a/packages/tempo/dist/tempo.class.js +++ b/packages/tempo/dist/tempo.class.js @@ -1,33 +1,32 @@ import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from "tslib"; -import '#core/temporal.polyfill.js'; // side-effect runtime check for Temporal +import '#tempo/temporal.polyfill.js'; // side-effect runtime check for Temporal // #region library modules~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -import { Logify } from '#core/shared/logify.class.js'; -import { ifDefined } from '#core/shared/object.library.js'; -import { secure } from '#core/shared/utility.library.js'; -import { Immutable, Serializable } from '#core/shared/class.library.js'; -import { asArray, asNumber, asInteger, isNumeric, ifNumeric } from '#core/shared/coercion.library.js'; -import { cleanify, stringify } from '#core/shared/serialize.library.js'; -import { getStorage, setStorage } from '#core/shared/storage.library.js'; -import { ownKeys, ownEntries, getAccessors, omit } from '#core/shared/reflection.library.js'; -import { getProxy } from '#core/shared/proxy.library.js'; -import { getContext, CONTEXT } from '#core/shared/utility.library.js'; -import { pad, singular, toProperCase, trimAll } from '#core/shared/string.library.js'; -import { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#core/shared/type.library.js'; -import * as enums from '#core/tempo.config/tempo.enum.js'; -import registerTerms from '#core/tempo.config/terms/term.import.js'; -import { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#core/tempo.config/tempo.default.js'; -import '#core/shared/prototype.library.js'; // patch prototypes -// #region Const variables +import { Logify } from '#library/logify.class.js'; +import { ifDefined } from '#library/object.library.js'; +import { secure } from '#library/utility.library.js'; +import { Immutable, Serializable } from '#library/class.library.js'; +import { asArray, asNumber, asInteger, isNumeric, ifNumeric } from '#library/coercion.library.js'; +import { cleanify, stringify } from '#library/serialize.library.js'; +import { getStorage, setStorage } from '#library/storage.library.js'; +import { ownKeys, ownEntries, getAccessors, omit } from '#library/reflection.library.js'; +import { getProxy } from '#library/proxy.library.js'; +import { getContext, CONTEXT } from '#library/utility.library.js'; +import { pad, singular, toProperCase, trimAll } from '#library/string.library.js'; +import { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#library/type.library.js'; +import * as enums from '#tempo/tempo.config/tempo.enum.js'; +import registerTerms from '#tempo/tempo.config/terms/term.import.js'; +import { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#tempo/tempo.config/tempo.default.js'; +import '#library/prototype.library.js'; // patch prototypes /** key to use for storage / globalThis Symbol */ export const $Tempo = Symbol.for('$Tempo'); /** current execution context*/ const Context = getContext(); -// #endregion Const variables +// #region Const variables /** * # Tempo * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. */ let Tempo = (() => { - var _a, _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_conformToGroups; + var _a, _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_getConfig; let _classDecorators = [Serializable, Immutable]; let _classDescriptor; let _classExtraInitializers = []; @@ -114,20 +113,24 @@ let Tempo = (() => { locale; // cannot determine locale } }; } - // #endregion Static private methods - // #region Static public methods~~~~~~~~~~~~~~~~~~~~~~~~~~ - /** - * Bootstrap the library with a Custom Global Discovery object. - * - * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern - * and automatically calls `Tempo.init()` to apply the discovered configuration. - * - * @param config - The Global Discovery object to register. - * @returns The resolved global configuration. - */ - static discover(config) { - globalThis[$Tempo] = config; - return this.init(); + static load(arg, options) { + asArray(arg).flat(1).forEach(item => { + if (isFunction(item)) { + if (!item.installed) { + item(options, this, (val) => new this(val)); // handle Plugins (Functional extension) + item.installed = true; + } + } + if (isObject(item) && isString(item.key) && isFunction(item.define)) { + if (!__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).some(term => term.key === item.key)) + __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).push(item); // handle TermPlugins (Grammar extension) + } + if (isObject(item) && ownKeys(item).some(key => enums.DISCOVERY.has(key))) { + globalThis[$Tempo] = item; // handle Discovery (Configuration bootstrapping) + this.init(); + } + }); + return this; } /** * Initializes the global default configuration for all subsequent `Tempo` instances. @@ -165,7 +168,7 @@ let Tempo = (() => { for (const key of Object.keys(Token)) // purge user-allocated Tokens if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys delete Token[key]; - Tempo.addTerm(...registerTerms); // register built-in term plugins + this.load(registerTerms); // register built-in term plugins const storeKey = Symbol.keyFor($Tempo); __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), $Tempo)); @@ -240,7 +243,8 @@ let Tempo = (() => { if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales')) monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global) return monthDay.some(mdy => { - const tzs = mdy.timeZones ?? mdy.getTimeZones?.() ?? []; + const m = mdy; + const tzs = m.timeZones ?? m.getTimeZones?.() ?? []; return tzs.includes(shape.config.timeZone); }); }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) { @@ -336,7 +340,7 @@ let Tempo = (() => { shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal; break; case 'plugins': - asArray(optVal).forEach(p => this.extend(p)); + asArray(optVal).forEach(p => this.load(p)); break; case 'anchor': break; // internal anchor used for relativity parsing @@ -371,13 +375,13 @@ let Tempo = (() => { TimeZone[key.toLowerCase()] = value; // 2. Process Terms if (discovery.terms) - Tempo.addTerm(...asArray(discovery.terms)); + this.load(asArray(discovery.terms)); // 3. Process Formats if (discovery.formats) shape.config.formats = shape.config.formats.extend(discovery.formats); // 4. Process Plugins if (discovery.plugins) - asArray(discovery.plugins).forEach(p => this.extend(p)); + asArray(discovery.plugins).forEach(p => this.load(p)); // 4. Process Options let opts = discovery.options || {}; return isFunction(opts) ? opts() : opts; @@ -393,18 +397,6 @@ let Tempo = (() => { for (const [sym, layout] of ownEntries(shape.parse.layout, true)) shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet)); }, Symbol.dispose)]() { Tempo.init(); } - /** - * Extends the Tempo class with new functionality. - * Plugins can add static or instance methods to the library. - */ - static extend(plugin, options) { - const p = plugin; - if (!p.installed) { - p(options, this, (val) => new this(val)); - p.installed = true; - } - return this; - } /** Reads options from persistent storage (e.g., localStorage). */ static readStore(key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { return getStorage(key, {}); @@ -477,7 +469,7 @@ let Tempo = (() => { /** global discovery configuration */ static get discovery() { const sym = Symbol.for(this.config.discovery); - return getProxy(omit({ ...globalThis[sym], scope: 'discovery' }, 'value')); + return __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_getConfig).call(Tempo, sym); } /** * Returns a snapshot of the configuration layers used by Tempo. @@ -499,15 +491,6 @@ let Tempo = (() => { return secure(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) .map(({ define, ...rest }) => rest)); // omit the 'define' method } - /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ - static addTerm(...plugin) { - asArray(plugin) - .flat(1) - .forEach(p => { - if (!__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).some(t => t.key === p.key)) // check for duplicate key - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).push(p); // append; silently ignore duplicates - }); - } /** static Tempo properties getter */ static get properties() { return secure(getAccessors(Tempo) @@ -533,20 +516,9 @@ let Tempo = (() => { }); } /** iterate over Tempo properties */ - static [(_Tempo_conformToGroups = function _Tempo_conformToGroups(tempo) { - const groups = {}; - if ('year' in tempo) { - groups.yy = tempo.year.toString().padStart(4, '0'); - groups.mm = tempo.month.toString().padStart(2, '0'); - groups.dd = tempo.day.toString().padStart(2, '0'); - } - if ('hour' in tempo) { - groups.hh = tempo.hour.toString().padStart(2, '0'); - groups.mi = tempo.minute.toString().padStart(2, '0'); - groups.ss = tempo.second.toString().padStart(2, '0'); - groups.ff = tempo.nanosecond.toString().padStart(9, '0'); - } - return groups; + static [(_Tempo_getConfig = function _Tempo_getConfig(sym) { + const discovery = globalThis[sym]; + return getProxy(omit({ ...discovery, scope: 'discovery' }, 'value')); }, Symbol.iterator)]() { return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters' } @@ -589,7 +561,8 @@ let Tempo = (() => { try { this.#anchor = this.#options.anchor; this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg - if (['iso8601', 'gregory'].includes(this.#local.config['calendar'])) { + const cal = this.#local.config.calendar; + if (isString(cal) && ['iso8601', 'gregory'].includes(cal)) { for (const key of this.#local.config.formats.keys()) Object.assign(this.#fmt, { [key]: this.format(key) }); } @@ -848,7 +821,7 @@ let Tempo = (() => { if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property) const { timeZone, calendar, value, ...options } = tempo; let zdt = !isEmpty(options) - ? dateTime.with({ ...options }) + ? dateTime.with(options) : dateTime; if (timeZone) zdt = zdt.withTimeZone(timeZone); // optionally set timeZone @@ -940,7 +913,7 @@ let Tempo = (() => { } } finally { - this.#anchor = void 0; // reset anchor + this.#anchor = undefined; // reset anchor } // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date) if (isDefined(groups["mm"]) && !isNumeric(groups["mm"])) { @@ -983,17 +956,18 @@ let Tempo = (() => { ? -adjust : -(adjust - 1); case '<=': // period before or including base-date + case '-=': return (period < offset) ? -adjust : -(adjust - 1); - case '>': // period after base-date + case '>': // period strictly after base-date case 'hence': - return (period > offset) + return (period >= offset) ? adjust : (adjust - 1); case '>=': // period after or including base-date case '+=': - return (period >= offset) + return (period > offset) ? adjust : (adjust - 1); default: // unexpected modifier @@ -1486,10 +1460,12 @@ let Tempo = (() => { const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') }); if (isDefined(unit)) unit = `${singular(unit)}s`; // coerce to plural - return (isUndefined(unit) || since) // if no 'unit' provided, or if called via #since() - ? getAccessors(duration) // return an Object with all the duration accessors - .reduce((acc, dur) => Object.assign(acc, { [dur]: duration[dur] }), ifDefined({ iso: duration.toString(), unit })) - : duration.total({ relativeTo: this.#zdt, unit }); // sum-up the duration components + if (isUndefined(unit) || since) { + const res = getAccessors(duration) + .reduce((acc, dur) => Object.assign(acc, ifDefined({ [dur]: duration[dur] })), {}); + return Object.assign(res, { iso: duration.toString(), unit }); + } + return duration.total({ relativeTo: this.#zdt, unit }); } /** format the elapsed time between two Tempos (to nanosecond) */ #since(arg, until = {}) { diff --git a/packages/tempo/dist/tempo.class.js.map b/packages/tempo/dist/tempo.class.js.map index 723b9fb8..e45c06b0 100644 --- a/packages/tempo/dist/tempo.class.js.map +++ b/packages/tempo/dist/tempo.class.js.map @@ -1 +1 @@ -{"version":3,"file":"tempo.class.js","sourceRoot":"","sources":["../src/tempo.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tempo.class.js","sourceRoot":"","sources":["../src/tempo.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/tempo/dist/tempo.config/plugins/plugin.ticker.d.ts b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.d.ts index 69cc7dbf..896480dd 100644 --- a/packages/tempo/dist/tempo.config/plugins/plugin.ticker.d.ts +++ b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.d.ts @@ -1,5 +1,5 @@ -import type { Tempo } from '#core/tempo.class.js'; -declare module '#core/tempo.class.js' { +import type { Tempo } from '#tempo/tempo.class.js'; +declare module '#tempo/tempo.class.js' { namespace Tempo { /** ticker 'intervalMs' allowed types */ type TickerInterval = number | string | bigint; /** callback function for Tempo.ticker() */ type TickerCallback = (t: Tempo, stop: () => void) => void; diff --git a/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js index d28281aa..22626be4 100644 --- a/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js +++ b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js @@ -1,5 +1,5 @@ -import { asNumber } from '#core/shared/coercion.library.js'; -import { isNumber, isFunction } from '#core/shared/type.library.js'; +import { asNumber } from '#library/coercion.library.js'; +import { isNumber, isFunction } from '#library/type.library.js'; /** * # TickerPlugin * Implementation of Tempo.ticker as an optional plugin. diff --git a/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js.map b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js.map index 7bd42e8b..bf259ab4 100644 --- a/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js.map +++ b/packages/tempo/dist/tempo.config/plugins/plugin.ticker.js.map @@ -1 +1 @@ -{"version":3,"file":"plugin.ticker.js","sourceRoot":"","sources":["../../../src/tempo.config/plugins/plugin.ticker.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"plugin.ticker.js","sourceRoot":"","sources":["../../../src/tempo.config/plugins/plugin.ticker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAkBhE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiB,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE;IAC5E,MAAM,MAAM,GAAG,UAAU,UAAU,EAAE,cAAc,EAAE,QAAQ;QAC5D,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACtB,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;QAEjF,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC;YAC5C,CAAC,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC;YAC7B,CAAC,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAE9B,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,iBAAiB,CAAC;QAC3D,IAAI,OAAO,GAAG,IAAI,UAAU,CAAC,IAAsB,CAAC,CAAC;QAErD,wBAAwB;QACxB,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,IAAI,EAA6C,EAAE,OAAO,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;YAC9E,MAAM,KAAK,GAAG,GAAG,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;gBAC/B,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAqB,CAAC;YAE3D,CAAC,SAAS,IAAI;gBACb,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAa,mBAAmB;gBAE1D,IAAI,CAAC,OAAO,EAAE,CAAC;oBACd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;oBAEnE,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;wBACpB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA,2BAA2B;wBAC7E,IAAI,EAAE,CAAC,CAAqB,UAAU;oBACvC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACX,CAAC;YACF,CAAC,CAAC,EAAE,CAAC,CAAyB,4BAA4B;YAE1D,OAAO,IAAI,CAAC;QACb,CAAC;QAED,+BAA+B;QAC/B,MAAM,SAAS,GAAG,CAAC,KAAK,SAAS,CAAC;YACjC,MAAM,KAAK,GAAG,GAAG,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,OAAO,IAAI,EAAE,CAAC;gBACb,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAe,mBAAmB;gBACxD,IAAI,QAAQ,KAAK,CAAC;oBAAE,MAAM,CAAa,0BAA0B;gBAEjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;gBACnE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBACzD,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,2BAA2B;YAC/E,CAAC;QACF,CAAC,CAAC,EAA2B,CAAC;QAE9B,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;YAC/B,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC;SACxE,CAAC,CAAC;IACJ,CAAwB,CAAC;IAEzB,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5B,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/tempo/dist/tempo.config/tempo.default.d.ts b/packages/tempo/dist/tempo.config/tempo.default.d.ts index 0aa9639d..19c45213 100644 --- a/packages/tempo/dist/tempo.config/tempo.default.d.ts +++ b/packages/tempo/dist/tempo.config/tempo.default.d.ts @@ -1,4 +1,4 @@ -import type { Tempo } from '#core/tempo.class.js'; +import type { Tempo } from '#tempo/tempo.class.js'; /** common RegExp patterns */ export declare const Match: { /** match all {} pairs, if they start with a word char */ readonly braces: RegExp; @@ -17,7 +17,7 @@ export declare const Match: { /** Z character */ readonly zed: RegExp; }; /** Tempo Symbol registry */ -export declare const Token: import("#core/shared/type.library.js").Extend<{ +export declare const Token: import("#library/type.library.js").Extend<{ /** year */ readonly yy: symbol; /** month */ readonly mm: symbol; /** day */ readonly dd: symbol; @@ -58,7 +58,7 @@ export type Token = typeof Token; /** * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy') */ -export declare const Snippet: import("#core/shared/type.library.js").Extend<{ +export declare const Snippet: import("#library/type.library.js").Extend<{ readonly [Token.yy]: RegExp; readonly [Token.mm]: RegExp; readonly [Token.dd]: RegExp; @@ -82,7 +82,7 @@ export type Snippet = typeof Snippet; * a {layout} is a Record of snippet-combinations describing an input DateTime argument * the Layout's keys are in the order that they will be checked against an input value */ -export declare const Layout: import("#core/shared/type.library.js").Extend<{ +export declare const Layout: import("#library/type.library.js").Extend<{ readonly [Token.dt]: "({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))"; readonly [Token.tm]: "({hh}{mi}?{ss}?{ff}?{mer}?|{per})"; readonly [Token.dtm]: "({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?"; @@ -100,7 +100,7 @@ export type Layout = typeof Layout; * if assigning a function, use standard 'function()' syntax to allow for 'this' binding. * also, a function should always have a .toString() method which returns a parse-able Date string */ -export declare const Event: import("#core/shared/type.library.js").Extend<{ +export declare const Event: import("#library/type.library.js").Extend<{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; @@ -120,7 +120,7 @@ export type Event = typeof Event; * values can be a string or a function. * if using a function, use regular 'function()' syntax to allow for 'this' binding. */ -export declare const Period: import("#core/shared/type.library.js").Extend<{ +export declare const Period: import("#library/type.library.js").Extend<{ readonly 'mid[ -]?night': "24:00"; readonly morning: "8:00"; readonly 'mid[ -]?morning': "10:00"; @@ -135,7 +135,7 @@ export type Period = typeof Period; * a {timeZone} alias dictionary mapping common abbreviations to IANA strings. * Tempo will check this registry to convert abbreviations before passing them to Temporal. */ -export declare const TimeZone: import("#core/shared/type.library.js").Extend<{ +export declare const TimeZone: import("#library/type.library.js").Extend<{ readonly utc: "UTC"; readonly gmt: "Europe/London"; readonly est: "America/New_York"; @@ -154,4 +154,4 @@ export declare const TimeZone: import("#core/shared/type.library.js").Extend<{ }, string, string>; export type TimeZone = typeof TimeZone; /** Reasonable default options for initial Tempo config */ -export declare const Default: import("#core/shared/type.library.js").SecureObject; +export declare const Default: import("#library/type.library.js").SecureObject; diff --git a/packages/tempo/dist/tempo.config/tempo.default.js b/packages/tempo/dist/tempo.config/tempo.default.js index 3d8f9159..244d047d 100644 --- a/packages/tempo/dist/tempo.config/tempo.default.js +++ b/packages/tempo/dist/tempo.config/tempo.default.js @@ -1,5 +1,5 @@ -import { looseIndex } from '#core/shared/object.library.js'; -import { secure } from '#core/shared/utility.library.js'; +import { looseIndex } from '#library/object.library.js'; +import { secure } from '#library/utility.library.js'; // BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW // TEMPO functionality heavily depends on these patterns /** common RegExp patterns */ diff --git a/packages/tempo/dist/tempo.config/tempo.default.js.map b/packages/tempo/dist/tempo.config/tempo.default.js.map index e9be645f..880ca0ec 100644 --- a/packages/tempo/dist/tempo.config/tempo.default.js.map +++ b/packages/tempo/dist/tempo.config/tempo.default.js.map @@ -1 +1 @@ -{"version":3,"file":"tempo.default.js","sourceRoot":"","sources":["../../src/tempo.config/tempo.default.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tempo.default.js","sourceRoot":"","sources":["../../src/tempo.config/tempo.default.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/tempo/dist/tempo.config/tempo.enum.d.ts b/packages/tempo/dist/tempo.config/tempo.enum.d.ts index 4836d127..5f617dbb 100644 --- a/packages/tempo/dist/tempo.config/tempo.enum.d.ts +++ b/packages/tempo/dist/tempo.config/tempo.enum.d.ts @@ -1,5 +1,5 @@ -import type { Enum } from '#core/shared/enumerate.library.js'; -import type { OwnOf, KeyOf, ValueOf, LooseUnion, Mutable } from '#core/shared/type.library.js'; +import type { Enum } from '#library/enumerate.library.js'; +import type { OwnOf, KeyOf, ValueOf, LooseUnion, Mutable } from '#library/type.library.js'; /** * Various enumerations used throughout Tempo library. * These are exported and added as static getters of the Tempo class. @@ -9,13 +9,13 @@ import type { OwnOf, KeyOf, ValueOf, LooseUnion, Mutable } from '#core/shared/ty * ``` */ /** */ -export declare const WEEKDAY: Enum.wrap>; -export declare const WEEKDAYS: Enum.wrap>; +export declare const WEEKDAY: Enum.wrap>; +export declare const WEEKDAYS: Enum.wrap>; export type WEEKDAY = KeyOf; export type WEEKDAYS = KeyOf; export type Weekday = ValueOf; -export declare const MONTH: Enum.wrap>; -export declare const MONTHS: Enum.wrap>; +export declare const MONTH: Enum.wrap>; +export declare const MONTHS: Enum.wrap>; export type MONTH = KeyOf; export type MONTHS = KeyOf; export type Month = ValueOf; @@ -92,7 +92,7 @@ export type Formats = { } & Record; /** Enum registry of format strings */ export type FormatEnum = Enum.wrap>; -export declare const LIMIT: import("#core/shared/type.library.js").SecureObject<{ +export declare const LIMIT: import("#library/type.library.js").SecureObject<{ /** Tempo(31-Dec-9999.23:59:59).ns */ readonly maxTempo: bigint; /** Tempo(01-Jan-1000.00:00:00).ns */ readonly minTempo: bigint; }>; @@ -116,10 +116,10 @@ export type Mutation = KeyOf; export declare const ZONED_DATE_TIME: any; export type ZONED_DATE_TIME = ValueOf; export type ZonedDateTime = KeyOf; -export declare const OPTION: Enum.wrap>; -export type OPTION = typeof OPTION; -export type Option = KeyOf = [A, B] - */ -export type UnionToTuple> = Acc['length'] extends SafeRecursion ? T[] : [ - T -] extends [never] ? Acc : UnionToTuple, [Last, ...Acc]>; -/** Deep Readonly object for type safety */ -export type Secure = T extends (infer R)[] ? SecureArray : T extends Function ? T : T extends object ? SecureObject : T; -export interface SecureArray extends ReadonlyArray> { -} -export type SecureObject = { - readonly [K in keyof T]: Secure; -}; -type LooseString = (string & {}); -type LooseProperty = (PropertyKey & {}); -/** Loose union */ -export type LooseUnion = T | LooseString; -/** Loose property key */ -export type LooseKey = K | LooseProperty; -/** Extend an object with a generic-signature */ -export type Extend = T & { - [P in K]: V; -}; -export {}; diff --git a/packages/library/src/type.library.js b/packages/library/src/type.library.js deleted file mode 100644 index 13c3b1e0..00000000 --- a/packages/library/src/type.library.js +++ /dev/null @@ -1,81 +0,0 @@ -/** the primitive type reported by toStringTag() */ -const protoType = (obj) => Object.prototype.toString.call(obj).slice(8, -1); -/** - * return an object's type as a ProperCase string. - * if instance, return Class name - */ -export const getType = (obj, ...instances) => { - const type = protoType(obj); - switch (true) { - case type === 'Object': - const name = isArrayLike(obj) - ? 'ArrayLike' // special case Object: ArrayLike - : obj.constructor?.name ?? 'Object'; // some Objects do not have a constructor method - return (instances - .find(inst => obj instanceof inst.class)?.type // allow for 'real' name of Instance, after minification - ?? name); // return Object name - case type === 'Function' && Function.prototype.toString.call(obj).startsWith('class '): - return 'Class'; - default: - return type; - } -}; -/** return TypeValue object */ -export const asType = (value, ...instances) => ({ type: getType(value, ...instances), value }); -/** assert value is one of a list of Types */ -export const isType = (obj, ...types) => types.includes(getType(obj)); -/** Type-Guards: assert \ is of \ */ -export const isPrimitive = (obj) => isType(obj, 'String', 'Number', 'BigInt', 'Boolean', 'Symbol', 'Undefined', 'Void', 'Null', 'Empty'); -export const isReference = (obj) => !isPrimitive(obj); -export const isIterable = (obj) => Symbol.iterator in Object(obj) && !isString(obj); -export const isString = (obj) => isType(obj, 'String'); -export const isNumber = (obj) => isType(obj, 'Number') && isFinite(obj); -export const isInteger = (obj) => isType(obj, 'BigInt'); -export const isIntegerLike = (obj) => isType(obj, 'String') && /^-?[0-9]+n$/.test(obj); -export const isDigit = (obj) => isType(obj, 'Number', 'BigInt'); -export const isBoolean = (obj) => isType(obj, 'Boolean'); -export const isArray = (obj) => isType(obj, 'Array'); -export const isArrayLike = (obj) => protoType(obj) === 'Object' && 'length' in obj && Object.keys(obj).every(key => key === 'length' || !isNaN(Number(key))); -export const isObject = (obj) => isType(obj, 'Object'); -export const isDate = (obj) => isType(obj, 'Date'); -export const isRegExp = (obj) => isType(obj, 'RegExp'); -export const isRegExpLike = (obj) => isType(obj, 'String') && /^\/.*\/$/.test(obj); -export const isSymbol = (obj) => isType(obj, 'Symbol'); -export const isSymbolFor = (obj) => isType(obj, 'Symbol') && Symbol.keyFor(obj) !== undefined; -export const isPropertyKey = (obj) => isType(obj, 'String', 'Number', 'Symbol'); -export const isNull = (obj) => isType(obj, 'Null'); -export const isNullish = (obj) => isType(obj, 'Null', 'Undefined', 'Void', 'Empty'); -export const isUndefined = (obj) => isType(obj, 'Undefined', 'Void', 'Empty'); -export const isDefined = (obj) => !isNullish(obj); -export const isClass = (obj) => isType(obj, 'Class'); -export const isFunction = (obj) => isType(obj, 'Function', 'AsyncFunction'); -export const isPromise = (obj) => isType(obj, 'Promise'); -export const isMap = (obj) => isType(obj, 'Map'); -export const isSet = (obj) => isType(obj, 'Set'); -export const isError = (err) => isType(err, 'Error'); -export const isTemporal = (obj) => protoType(obj).startsWith('Temporal.'); -// non-standard Objects -export const isTempo = (obj) => isType(obj, 'Tempo'); -export const isEnum = (obj) => isType(obj, 'Enumify'); -export const isPledge = (obj) => isType(obj, 'Pledge'); -export const nullToZero = (obj) => obj ?? 0; -export const nullToEmpty = (obj) => obj ?? ''; -export const nullToValue = (obj, value) => obj ?? value; -/** object has no values */ -export const isEmpty = (obj) => false - || isNullish(obj) - || (isObject(obj) && (Reflect.ownKeys(obj).length === 0)) - || (isString(obj) && (obj.trim().length === 0)) - || (isNumber(obj) && (isNaN(obj) === true)) - || (isArray(obj) && (obj.length === 0)) - || (isSet(obj) && (obj.size === 0)) - || (isMap(obj) && (obj.size === 0)); -export function assertCondition(condition, message) { - if (!condition) - throw new Error(message); -} -export function assertString(str) { assertCondition(isString(str), `Invalid string: ${str}`); } -; -export function assertNever(val) { throw new Error(`Unexpected object: ${val}`); } -; -//# sourceMappingURL=type.library.js.map \ No newline at end of file diff --git a/packages/library/src/type.library.js.map b/packages/library/src/type.library.js.map deleted file mode 100644 index de68a95c..00000000 --- a/packages/library/src/type.library.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"type.library.js","sourceRoot":"","sources":["type.library.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,SAAS,GAAG,CAAC,GAAa,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEtF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAS,EAAE,GAAG,SAAqB,EAAE,EAAE;IAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAS,CAAC;IAEpC,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,IAAI,KAAK,QAAQ;YACrB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC;gBAC5B,CAAC,CAAC,WAAW,CAAoB,iCAAiC;gBAClE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,IAAI,QAAQ,CAAA,CAAS,gDAAgD;YAE7F,OAAO,CAAC,SAAS;iBACf,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,YAAY,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAG,wDAAwD;mBACtG,IAAI,CAAS,CAAC,CAAkB,qBAAqB;QAE1D,KAAK,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;YACrF,OAAO,OAAO,CAAC;QAEhB;YACC,OAAO,IAAI,CAAC;IACd,CAAC;AACF,CAAC,CAAA;AAED,iCAAiC;AACjC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,KAAS,EAAE,GAAG,SAAqB,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,EAAE,KAAK,EAAmB,CAAA,CAAC;AAElI,6CAA6C;AAC7C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,GAAY,EAAE,GAAG,KAAa,EAAY,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAEpG,+CAA+C;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAa,EAAoB,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACrK,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAa,EAAiB,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,GAAY,EAAsB,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAEpH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,GAAO,EAA6B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,GAAO,EAA6B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,QAAQ,CAAC,GAAa,CAAC,CAAC;AACpH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,GAAO,EAA6B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC1F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAI,GAAO,EAA6B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC;AACnI,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,GAAO,EAAsC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC3G,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,GAAO,EAA8B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC5F,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,GAAY,EAAc,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,GAAQ,EAAuB,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1L,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,GAAO,EAA6B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,GAAO,EAA2B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,GAAO,EAA6B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,GAAO,EAA6B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC;AAC/H,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,GAAO,EAA6B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,GAAO,EAA6B,EAAE,CAAC,MAAM,CAAS,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AACxI,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAa,EAAsB,EAAE,CAAC,MAAM,CAAc,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE3H,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,GAAO,EAA2B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,GAAM,EAA8B,EAAE,CAAC,MAAM,CAA0B,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC/I,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,GAAO,EAAoB,EAAE,CAAC,MAAM,CAAY,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAClH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,GAAM,EAAyB,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,GAAO,EAA+B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,GAAO,EAA+B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;AAChH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,GAAO,EAAmC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACjG,MAAM,CAAC,MAAM,KAAK,GAAG,CAAsB,GAAO,EAAgC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACxG,MAAM,CAAC,MAAM,KAAK,GAAG,CAAa,GAAO,EAA6B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5F,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,GAAO,EAA4B,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,GAAM,EAAgC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAE9G,uBAAuB;AACvB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,GAAO,EAAuC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAc,CAAC,CAAC;AACxG,MAAM,CAAC,MAAM,MAAM,GAAG,CAA6B,GAAO,EAA4C,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,SAAgB,CAAC,CAAC;AACvI,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAa,GAAO,EAA2C,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAe,CAAC,CAAC;AAEvH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,GAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,GAAM,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAO,GAAM,EAAE,KAAQ,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC;AAEpE,2BAA2B;AAC3B,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,GAAO,EAAE,EAAE,CAAC,KAAK;OACxC,SAAS,CAAC,GAAG,CAAC;OACd,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;OACtD,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;OAC5C,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;OACxC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;OACpC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;OAChC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;AAEpC,MAAM,UAAU,eAAe,CAAC,SAAkB,EAAE,OAAgB;IACnE,IAAI,CAAC,SAAS;QACb,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,GAAY,IAA2B,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,mBAAmB,GAAG,EAAE,CAAC,CAAA,CAAC,CAAC;AAAA,CAAC;AAC/H,MAAM,UAAU,WAAW,CAAC,GAAU,IAA0B,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAA,CAAC,CAAC;AAAA,CAAC"} \ No newline at end of file diff --git a/packages/library/src/utility.library.d.ts b/packages/library/src/utility.library.d.ts deleted file mode 100644 index 18b5afcb..00000000 --- a/packages/library/src/utility.library.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { Secure, ValueOf } from '#library/type.library.js'; -/** General utility functions */ -/** analyze the Call Stack to determine calling Function's name */ -export declare const getCaller: () => string; -/** analyze the Call Stack to determine calling Function's name */ -export declare const getScript: (nbr?: number) => string; -/** - * introduce a wait-timer that will Error() on timeOut. - * best used with Promise.race([xxx(), sleep()] - * @param msg string to display on a timeout - * @param timeOut how many milliseconds to sleep (default 2-seconds) - * @returns Promise\ - */ -export declare const sleep: (msg?: string, timeOut?: number) => Promise; -/** Javascript Runtimes */ -export declare const CONTEXT: { - readonly Unknown: "unknown"; - readonly Browser: "browser"; - readonly NodeJS: "nodejs"; - readonly Deno: "deno"; - readonly GoogleAppsScript: "google-apps-script"; -}; -export type CONTEXT = ValueOf; -type Context = { - global: any; - type: CONTEXT; -}; -/** determine JavaScript environment context */ -export declare const getContext: () => Context; -/** deep-freeze an Array | Object to make it immutable */ -export declare function secure(obj: T): Secure; -export {}; diff --git a/packages/library/src/utility.library.js b/packages/library/src/utility.library.js deleted file mode 100644 index 6b74e5ff..00000000 --- a/packages/library/src/utility.library.js +++ /dev/null @@ -1,55 +0,0 @@ -import { ownValues } from '#library/reflection.library.js'; -import { isDefined, isReference } from '#library/type.library.js'; -/** General utility functions */ -/** analyze the Call Stack to determine calling Function's name */ -export const getCaller = () => { - const stackTrace = new Error().stack // only tested in latest FF and Chrome - ?.split('\n') - ?.map(itm => itm.trim()) - ?.filter(itm => !itm.startsWith('Error')) - ?? []; - const callerName = stackTrace[2].split(' '); - return (callerName[1] === 'new') ? callerName[2] : callerName[1].split('.')[0]; -}; -/** analyze the Call Stack to determine calling Function's name */ -export const getScript = (nbr = 1) => { - const stackTrace = new Error().stack - ?.match(/([^ \n\(@])*([a-z]*:\/\/\/?)*?[a-z0-9\/\\]*\.js/ig)?.[nbr]; - return decodeURI(stackTrace ?? ''); // decodeURI is needed to handle spaces in file-names -}; -/** - * introduce a wait-timer that will Error() on timeOut. - * best used with Promise.race([xxx(), sleep()] - * @param msg string to display on a timeout - * @param timeOut how many milliseconds to sleep (default 2-seconds) - * @returns Promise\ - */ -export const sleep = (msg = 'sleep: timed out', timeOut = 2000) => new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), timeOut)); -/** Javascript Runtimes */ -export const CONTEXT = { - 'Unknown': 'unknown', - 'Browser': 'browser', - 'NodeJS': 'nodejs', - 'Deno': 'deno', - 'GoogleAppsScript': 'google-apps-script', -}; -/** determine JavaScript environment context */ -export const getContext = () => { - const global = globalThis; - if (isDefined(global.SpreadsheetApp)) - return { global, type: CONTEXT.GoogleAppsScript }; - if (isDefined(global.window?.document)) - return { global, type: CONTEXT.Browser }; - if (isDefined(global.process?.versions?.node)) - return { global, type: CONTEXT.NodeJS }; - return { global, type: CONTEXT.Unknown }; -}; -// useful for those times when a full Enumify object is not needed, but still lock the Object from mutations -/** deep-freeze an Array | Object to make it immutable */ -export function secure(obj) { - if (isReference(obj)) // skip primitive values - ownValues(obj) // retrieve the properties on obj - .forEach(val => Object.isFrozen(val) || secure(val)); // secure each value, if not already Frozen - return Object.freeze(obj); // freeze the object itself -} -//# sourceMappingURL=utility.library.js.map \ No newline at end of file diff --git a/packages/library/src/utility.library.js.map b/packages/library/src/utility.library.js.map deleted file mode 100644 index 4a96b6ce..00000000 --- a/packages/library/src/utility.library.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"utility.library.js","sourceRoot":"","sources":["utility.library.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.d.ts deleted file mode 100644 index 32c3c699..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './tempo.class.js'; -export * as enums from './tempo.config/tempo.enum.js'; -export * from '#library/pledge.class.js'; -export * from '#library/serialize.library.js'; -export * from '#library/enumerate.library.js'; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js deleted file mode 100644 index cae3acf1..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js +++ /dev/null @@ -1,6 +0,0 @@ -export * from './tempo.class.js'; // Temporal wrapper -export * as enums from './tempo.config/tempo.enum.js'; -export * from '#library/pledge.class.js'; // Promise wrapper -export * from '#library/serialize.library.js'; // stringify, objectify, cloneify functions -export * from '#library/enumerate.library.js'; // enumify function -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js.map b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js.map deleted file mode 100644 index d6541e0b..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC,CAAc,mBAAmB;AAClE,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AAEtD,cAAc,8BAA8B,CAAC,CAAW,kBAAkB;AAC1E,cAAc,mCAAmC,CAAC,CAAQ,2CAA2C;AACrG,cAAc,mCAAmC,CAAC,CAAQ,mBAAmB"} \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.d.ts deleted file mode 100644 index 7e605d59..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.d.ts +++ /dev/null @@ -1,666 +0,0 @@ -import '#library/temporal.polyfill.js'; -import type { IntRange, LooseUnion, Mutable, NonOptional, OwnOf, Property, TPlural, Type } from '#library/type.library.js'; -import type { Enum } from '#library/enumerate.library.js'; -import * as enums from '#tempo/tempo.config/tempo.enum.js'; -import { Token, Snippet, Layout, Event, Period } from '#tempo/tempo.config/tempo.default.js'; -import '#library/prototype.library.js'; -declare module '#library/type.library.js' { - interface TypeValueMap { - Tempo: { - type: 'Tempo'; - value: Tempo; - }; - } -} -/** key to use for storage / globalThis Symbol */ export declare const $Tempo: unique symbol; -/** - * # Tempo - * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. - * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. - */ -export declare class Tempo { - #private; - /** Weekday names (short-form) */ static get WEEKDAY(): Enum.wrap>; - /** Weekday names (long-form) */ static get WEEKDAYS(): Enum.wrap>; - /** Month names (short-form) */ static get MONTH(): Enum.wrap>; - /** Month names (long-form) */ static get MONTHS(): Enum.wrap>; - /** Time durations as seconds (singular) */ static get DURATION(): Enum.wrap<{ - readonly year: 31536000; - readonly month: 2628000; - readonly week: 604800; - readonly day: 86400; - readonly hour: 3600; - readonly minute: 60; - readonly second: 1; - readonly millisecond: 0.001; - readonly microsecond: 0.000001; - readonly nanosecond: 1e-9; - }>; - /** Time durations as milliseconds (plural) */ static get DURATIONS(): Enum.wrap<{ - readonly years: number; - readonly months: number; - readonly weeks: number; - readonly days: number; - readonly hours: number; - readonly minutes: number; - readonly seconds: number; - readonly milliseconds: number; - readonly microseconds: number; - readonly nanoseconds: number; - }>; - /** Quarterly Seasons */ static get SEASON(): Enum.wrap<{ - readonly Summer: "summer"; - readonly Autumn: "autumn"; - readonly Winter: "winter"; - readonly Spring: "spring"; - }>; - /** Compass cardinal points */ static get COMPASS(): Enum.wrap<{ - readonly North: "north"; - readonly East: "east"; - readonly South: "south"; - readonly West: "west"; - }>; - /** Tempo to Temporal DateTime Units map */ static get ELEMENT(): Enum.wrap<{ - readonly yy: "year"; - readonly mm: "month"; - readonly ww: "week"; - readonly dd: "day"; - readonly hh: "hour"; - readonly mi: "minute"; - readonly ss: "second"; - readonly ms: "millisecond"; - readonly us: "microsecond"; - readonly ns: "nanosecond"; - }>; - /** Pre-configured format {name -> string} pairs */ static get FORMAT(): Tempo.Format; - /** some useful Dates */ static get LIMIT(): import("#library/type.library.js").SecureObject<{ - readonly maxTempo: any; - readonly minTempo: any; - }>; - /** - * Bootstrap the library with a Custom Global Discovery object. - * - * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern - * and automatically calls `Tempo.init()` to apply the discovered configuration. - * - * @param config - The Global Discovery object to register. - * @returns The resolved global configuration. - */ - static discover(config: Tempo.Discovery): { - [key: string]: any; - /** configuration (global | local) */ scope: "global" | "local"; - /** pre-configured format strings */ formats: Tempo.Format; - store: string; - discovery: string; - debug: boolean | undefined; - catch: boolean | undefined; - timeZone: Temporal.TimeZoneLike; - calendar: Temporal.CalendarLike; - locale: string; - sphere: Tempo.COMPASS | undefined; - timeStamp: Tempo.TimeStamp; - plugins: Tempo.Plugin | Tempo.Plugin[]; - anchor: Temporal.ZonedDateTime; - }; - /** - * Initializes the global default configuration for all subsequent `Tempo` instances. - * - * Settings are inherited in this priority: - * 1. Reasonable library defaults (defined in tempo.config.js) - * 2. Persistent storage (e.g. localStorage), if available. - * 3. `options` provided to this method. - * - * @param options - Configuration overrides to apply globally. - * @returns The resolved global configuration. - */ - static init(options?: Tempo.Options): { - [key: string]: any; - /** configuration (global | local) */ scope: "global" | "local"; - /** pre-configured format strings */ formats: Tempo.Format; - store: string; - discovery: string; - debug: boolean | undefined; - catch: boolean | undefined; - timeZone: Temporal.TimeZoneLike; - calendar: Temporal.CalendarLike; - locale: string; - sphere: Tempo.COMPASS | undefined; - timeStamp: Tempo.TimeStamp; - plugins: Tempo.Plugin | Tempo.Plugin[]; - anchor: Temporal.ZonedDateTime; - }; - /** release global config and reset library to defaults */ - static [Symbol.dispose](): void; - /** - * Extends the Tempo class with new functionality. - * Plugins can add static or instance methods to the library. - */ - static extend(plugin: Tempo.Plugin, options?: any): typeof Tempo; - /** Reads options from persistent storage (e.g., localStorage). */ - static readStore(key?: string): Tempo.Options; - /** Writes configuration into persistent storage. */ - static writeStore(config?: Tempo.Options, key?: string): void; - /** lookup or registers a new `Symbol` for a given key. */ - static getSymbol(key?: string | symbol): symbol; - /** translates {layout} into an anchored, case-insensitive RegExp. */ - static regexp(layout: string | RegExp, snippet?: Snippet): RegExp; - /** Compares two `Tempo` instances or date-time values. */ - static compare(tempo1?: Tempo.DateTime | Tempo.Options, tempo2?: Tempo.DateTime | Tempo.Options): number; - /** global Tempo configuration */ - static get config(): { - [key: string]: any; - /** configuration (global | local) */ scope: "global" | "local"; - /** pre-configured format strings */ formats: Tempo.Format; - store: string; - discovery: string; - debug: boolean | undefined; - catch: boolean | undefined; - timeZone: Temporal.TimeZoneLike; - calendar: Temporal.CalendarLike; - locale: string; - sphere: Tempo.COMPASS | undefined; - timeStamp: Tempo.TimeStamp; - plugins: Tempo.Plugin | Tempo.Plugin[]; - anchor: Temporal.ZonedDateTime; - }; - /** global discovery configuration */ - static get discovery(): any; - /** - * Returns a snapshot of the configuration layers used by Tempo. - * Useful for debugging how the final configuration is built. - */ - static get options(): { - default: import("#library/type.library.js").SecureObject<{ - readonly scope: "default"; - readonly timeZone: import("#library/type.library.js").Extend<{ - readonly utc: "UTC"; - readonly gmt: "Europe/London"; - readonly est: "America/New_York"; - readonly cst: "America/Chicago"; - readonly mst: "America/Denver"; - readonly pst: "America/Los_Angeles"; - readonly aest: "Australia/Sydney"; - readonly acst: "Australia/Adelaide"; - readonly awst: "Australia/Perth"; - readonly nzt: "Pacific/Auckland"; - readonly cet: "Europe/Paris"; - readonly eet: "Europe/Helsinki"; - readonly ist: "Asia/Kolkata"; - readonly npt: "Asia/Kathmandu"; - readonly jst: "Asia/Tokyo"; - }, string, string>; - readonly store?: string | undefined; - readonly discovery?: string | undefined; - readonly debug?: boolean | undefined; - readonly catch?: boolean | undefined; - readonly calendar?: Temporal.CalendarLike; - readonly locale?: string | undefined; - readonly pivot?: number | undefined; - readonly sphere?: Tempo.COMPASS | undefined; - readonly timeStamp?: Tempo.TimeStamp | undefined; - readonly mdyLocales?: string | import("#library/type.library.js").SecureArray | undefined; - readonly mdyLayouts?: import("#library/type.library.js").SecureArray | undefined; - readonly snippet?: string | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; - readonly layout?: string | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly event?: Tempo.Logic | import("#library/type.library.js").SecureObject any; - readonly today: (this: any) => any; - readonly tomorrow: (this: any) => any; - readonly yesterday: (this: any) => any; - }, string, string | Function>> | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; - readonly period?: Tempo.Logic | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly formats?: import("#library/type.library.js").SecureObject> | undefined; - readonly plugins?: Tempo.Plugin | import("#library/type.library.js").SecureArray | undefined; - readonly value?: Tempo.DateTime; - readonly anchor?: Temporal.ZonedDateTime; - }>; - discovery: any; - storage: { - key: string; - scope: string; - } & Partial & Record; - global: { - [key: string]: any; - /** configuration (global | local) */ scope: "global" | "local"; - /** pre-configured format strings */ formats: Tempo.Format; - store: string; - discovery: string; - debug: boolean | undefined; - catch: boolean | undefined; - timeZone: Temporal.TimeZoneLike; - calendar: Temporal.CalendarLike; - locale: string; - sphere: Tempo.COMPASS | undefined; - timeStamp: Tempo.TimeStamp; - plugins: Tempo.Plugin | Tempo.Plugin[]; - anchor: Temporal.ZonedDateTime; - }; - }; - /** Creates a new `Tempo` instance. */ - static from(options?: Tempo.Options): Tempo; - static from(tempo: Tempo.DateTime | undefined, options?: Tempo.Options): Tempo; - static now(): any; - /** static Tempo.terms getter */ - static get terms(): import("#library/type.library.js").SecureArray<{ - key: string; - scope?: string; - description: string; - }>; - /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ - static addTerm(...plugin: Tempo.TermPlugin[]): void; - /** static Tempo properties getter */ - static get properties(): import("#library/type.library.js").SecureArray; - /** Tempo initial default settings */ - static get default(): import("#library/type.library.js").SecureObject<{ - readonly scope: "default"; - readonly timeZone: import("#library/type.library.js").Extend<{ - readonly utc: "UTC"; - readonly gmt: "Europe/London"; - readonly est: "America/New_York"; - readonly cst: "America/Chicago"; - readonly mst: "America/Denver"; - readonly pst: "America/Los_Angeles"; - readonly aest: "Australia/Sydney"; - readonly acst: "Australia/Adelaide"; - readonly awst: "Australia/Perth"; - readonly nzt: "Pacific/Auckland"; - readonly cet: "Europe/Paris"; - readonly eet: "Europe/Helsinki"; - readonly ist: "Asia/Kolkata"; - readonly npt: "Asia/Kathmandu"; - readonly jst: "Asia/Tokyo"; - }, string, string>; - readonly store?: string | undefined; - readonly discovery?: string | undefined; - readonly debug?: boolean | undefined; - readonly catch?: boolean | undefined; - readonly calendar?: Temporal.CalendarLike; - readonly locale?: string | undefined; - readonly pivot?: number | undefined; - readonly sphere?: Tempo.COMPASS | undefined; - readonly timeStamp?: Tempo.TimeStamp | undefined; - readonly mdyLocales?: string | import("#library/type.library.js").SecureArray | undefined; - readonly mdyLayouts?: import("#library/type.library.js").SecureArray | undefined; - readonly snippet?: string | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; - readonly layout?: string | import("#library/type.library.js").SecureObject | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly event?: Tempo.Logic | import("#library/type.library.js").SecureObject any; - readonly today: (this: any) => any; - readonly tomorrow: (this: any) => any; - readonly yesterday: (this: any) => any; - }, string, string | Function>> | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | undefined; - readonly period?: Tempo.Logic | import("#library/type.library.js").SecureObject> | import("#library/type.library.js").SecureArray> | import("#library/type.library.js").SecureObject> | undefined; - readonly formats?: import("#library/type.library.js").SecureObject> | undefined; - readonly plugins?: Tempo.Plugin | import("#library/type.library.js").SecureArray | undefined; - readonly value?: Tempo.DateTime; - readonly anchor?: Temporal.ZonedDateTime; - }>; - /** - * configuration governing the static 'rules' used when parsing Tempo.DateTime argument - */ - static get parse(): Tempo.Parse; - /** iterate over Tempo properties */ - static [Symbol.iterator](): ArrayIterator; - /** allow for auto-convert of Tempo to BigInt, Number or String */ - [Symbol.toPrimitive](hint?: 'string' | 'number' | 'default'): any; - /** iterate over instance formats */ - [Symbol.iterator](): ArrayIterator>; - get [Symbol.toStringTag](): string; - /** - * Instantiates a new `Tempo` object. - * - * @param tempo - The date-time value to parse. Can be a string, number, BigInt, Date, or another Tempo/Temporal object. - * @param options - Configuration options for this specific instance. - */ - constructor(options?: Tempo.Options); - constructor(tempo: Tempo.DateTime, options?: Tempo.Options); - /** 4-digit year (e.g., 2024) */ get yy(): any; - /** 4-digit ISO week-numbering year */ get wy(): any; - /** Month number: Jan=1, Dec=12 */ get mm(): Tempo.mm; - /** ISO week number of the year */ get ww(): Tempo.ww; - /** Day of the month (1-31) */ get dd(): any; - /** Day of the month (alias for `dd`) */ get day(): any; - /** Hour of the day (0-23) */ get hh(): Tempo.hh; - /** Minutes of the hour (0-59) */ get mi(): Tempo.mi; - /** Seconds of the minute (0-59) */ get ss(): Tempo.ss; - /** Milliseconds of the second (0-999) */ get ms(): Tempo.ms; - /** Microseconds of the millisecond (0-999) */ get us(): Tempo.us; - /** Nanoseconds of the microsecond (0-999) */ get ns(): Tempo.ns; - /** Fractional seconds (e.g., 0.123456789) */ get ff(): number; - /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz(): any; - /** Unix timestamp (defaults to milliseconds) */ get ts(): any; - /** Short month name (e.g., 'Jan') */ get mmm(): "All" | "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec"; - /** Full month name (e.g., 'January') */ get mon(): "May" | "Every" | "January" | "February" | "March" | "April" | "June" | "July" | "August" | "September" | "October" | "November" | "December"; - /** Short weekday name (e.g., 'Mon') */ get www(): "All" | "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun"; - /** Full weekday name (e.g., 'Monday') */ get wkd(): "Everyday" | "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday"; - /** ISO weekday number: Mon=1, Sun=7 */ get dow(): Tempo.Weekday; - /** Nanoseconds since Unix epoch (BigInt) */ get nano(): any; - /** current Tempo configuration */ - get config(): { - [key: string]: any; - /** configuration (global | local) */ scope: "global" | "local"; - /** pre-configured format strings */ formats: Tempo.Format; - store: string; - discovery: string; - debug: boolean | undefined; - catch: boolean | undefined; - timeZone: Temporal.TimeZoneLike; - calendar: Temporal.CalendarLike; - locale: string; - sphere: Tempo.COMPASS | undefined; - timeStamp: Tempo.TimeStamp; - plugins: Tempo.Plugin | Tempo.Plugin[]; - anchor: Temporal.ZonedDateTime; - }; - /** Instance-specific parse rules (merged with global) */ get parse(): Tempo.Parse; - /** Object containing results from all term plugins */ get term(): Tempo.Terms; - /** Formatted results for all pre-defined format codes */ get fmt(): Tempo.Formats; - /** units since epoch */ get epoch(): import("#library/type.library.js").SecureObject<{ - /** seconds since epoch */ readonly ss: number; - /** milliseconds since epoch */ readonly ms: any; - /** microseconds since epoch */ readonly us: number; - /** nanoseconds since epoch */ readonly ns: any; - }>; - /** time duration until (with unit, returns number) */ until(until: Tempo.Until, opts?: Tempo.Options): number; - /** time duration until another date-time (with unit) */ until(dateTimeOrOpts: Tempo.DateTime | Tempo.Options, until: Tempo.Until): number; - /** time duration until (returns Duration) */ until(dateTimeOrOpts?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options): Tempo.Duration; - /** time elapsed since (with unit) */ since(until: Tempo.Until, opts?: Tempo.Options): string; - /** time elapsed since another date-time (with unit) */ since(dateTimeOrOpts: Tempo.DateTime | Tempo.Options, until: Tempo.Until): string; - /** time elapsed since (without unit) */ since(dateTimeOrOpts?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options): string; - /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt: K): Tempo.FormatType; - /** returns a new `Tempo` with specific duration added. */ add(tempo?: Tempo.DateTime | Tempo.Options, options?: Tempo.Options): Tempo; - /** returns a new `Tempo` with specific offsets. */ set(tempo?: Tempo.DateTime | Tempo.Options, options?: Tempo.Options): Tempo; - /** returns a clone of the current `Tempo` instance. */ clone(): Tempo; - /** returns the underlying Temporal.ZonedDateTime */ toDateTime(): any; - /** returns a Temporal.PlainDate representation */ toPlainDate(): any; - /** returns a Temporal.PlainTime representation */ toPlainTime(): any; - /** returns a Temporal.PlainDateTime representation */ toPlainDateTime(): any; - /** returns the underlying Temporal.Instant */ toInstant(): any; - /** the date-time as a standard `Date` object. */ toDate(): Date; - /** the ISO8601 string representation of the date-time. */ toString(): any; - /** Custom JSON serialization for `JSON.stringify`. */ toJSON(): { - value: any; - /** configuration (global | local) */ scope: "global" | "local"; - /** pre-configured format strings */ formats: Tempo.Format; - store: string; - discovery: string; - debug: boolean | undefined; - catch: boolean | undefined; - timeZone: Temporal.TimeZoneLike; - calendar: Temporal.CalendarLike; - locale: string; - sphere: Tempo.COMPASS | undefined; - timeStamp: Tempo.TimeStamp; - plugins: Tempo.Plugin | Tempo.Plugin[]; - anchor: Temporal.ZonedDateTime; - }; - /** `true` if the underlying date-time is valid. */ isValid(): boolean; -} -export declare namespace Tempo { - /** the value that Tempo will attempt to interpret as a valid ISO date / time */ - export type DateTime = string | number | bigint | Date | Tempo | typeof Temporal | Temporal.ZonedDateTimeLike | undefined | null; - export type Pattern = string | RegExp; - export type Logic = string | number | Function; - export type Pair = [string, string]; - export type Groups = Record; - export type Registry = Map; - export type PatternOption = T | Record | PatternOption[]; - /** the Options object found in a config-module, or passed to a call to Tempo.init({}) or 'new Tempo({})' */ - export interface BaseOptions { - /** localStorage key */ store: string; - /** globalThis Discovery Symbol */ discovery: string; - /** additional console.log for tracking */ debug: boolean | undefined; - /** catch or throw Errors */ catch: boolean | undefined; - /** Temporal timeZone */ timeZone: Temporal.TimeZoneLike; - /** Temporal calendar */ calendar: Temporal.CalendarLike; - /** locale (e.g. en-AU) */ locale: string; - /** pivot year for two-digit years */ pivot: number; - /** hemisphere for term.qtr or term.szn */ sphere: Tempo.COMPASS | undefined; - /** granularity of timestamps (ms | ns) */ timeStamp: Tempo.TimeStamp; - /** locale-names that prefer 'mm-dd-yy' date order */ mdyLocales: string | string[]; - /** swap parse-order of layouts */ mdyLayouts: Tempo.Pair[]; - /** date-time snippets to help compose a Layout */ snippet: Snippet | Tempo.PatternOption; - /** patterns to help parse value */ layout: Layout | Tempo.PatternOption; - /** custom date aliases (events). */ event: Event | Tempo.PatternOption; - /** custom time aliases (periods). */ period: Period | Tempo.PatternOption; - /** custom format strings to merge in the FORMAT enum */ formats: Property; - /** plugins to be automatically Extended via Tempo.extend() */ plugins: Plugin | Plugin[]; - /** supplied value to parse */ value: Tempo.DateTime; - /** @internal temporary anchor used during parsing */ anchor: Temporal.ZonedDateTime; - } - export type Options = Partial & Record; - /** define a new term plugin */ - export type TermPlugin = { - key: string; - scope?: string; - description: string; - define: (this: Tempo, keyOnly?: boolean) => any; - }; - /** plugin function that can extend the Tempo prototype or static space */ - export type Plugin = (options: any, TempoClass: typeof Tempo, factory: (val: any) => Tempo) => void; - /** internal metadata for a plugin to track installation */ - export interface PluginContainer extends Plugin { - installed?: boolean; - } - /** the encapsulated state of a Tempo instance */ - export interface State { - /** current defaults for all Tempo instances */ config: Tempo.Config; - /** parsing rules */ parse: Tempo.Parse; - } - /** Debugging results of a parse operation. See `doc/tempo.api.md`. */ - export interface Parse { - /** Locales which prefer 'mm-dd-yyyy' date-order */ mdyLocales: { - locale: string; - timeZones: string[]; - }[]; - /** Layout names that are switched to mdy */ mdyLayouts: Tempo.Pair[]; - /** is a timeZone that prefers 'mmddyyyy' date order */ isMonthDay?: boolean; - /** Symbol registry */ token: Token; - /** Tempo snippets to aid in parsing */ snippet: Snippet; - /** Tempo layout strings */ layout: Layout; - /** Map of regex-patterns to match input-string */ pattern: Tempo.Registry; - /** configured Events */ event: Event; - /** configured Periods */ period: Period; - /** pivot year for two-digit years */ pivot?: number; - /** parsing match result */ result: Tempo.Match[]; - } - /** debug a Tempo instantiation */ - export interface Match { - /** pattern which matched the input */ match?: string | undefined; - /** groups from the pattern match */ groups?: Tempo.Groups; - /** the type of the original input */ type: LooseUnion; - /** the value of the original input */ value: any; - /** was this a nested/anchored parse? */ isAnchored?: boolean; - } - /** drop the parse-only Options */ - type OptionsKeep = Omit; - /** Instance configuration derived from supply, storage, and discovery. */ - export interface Config extends Required> { - /** configuration (global | local) */ scope: 'global' | 'local'; - /** pre-configured format strings */ formats: Format; - [key: string]: any; - } - /** Timestamp precision */ - export type TimeStamp = 'ss' | 'ms' | 'us' | 'ns'; - /** structured configuration for Global Discovery via Symbol.for('$Tempo') */ - export interface Discovery { - /** pre-defined config options for Tempo.#global */ options?: Options | (() => Options); - /** term plugins to be registered via Tempo.addTerm() */ terms?: TermPlugin | TermPlugin[]; - /** aliases to merge in the TimeZone dictionary */ timeZones?: Record; - /** custom format strings to merge in the FORMAT dictionary */ formats?: Property; - /** plugins to be automatically extended via Tempo.extend() */ plugins?: Plugin | Plugin[]; - } - /** Configuration to use for #until() and #since() argument */ - export type Unit = Temporal.DateUnit | Temporal.TimeUnit | TPlural; - export type Until = (Tempo.Options & { - unit?: Tempo.Unit; - }) | Tempo.Unit; - export type Mutate = 'start' | 'mid' | 'end'; - export type Set = Partial & Record<'date' | 'time' | 'event' | 'period', string> & { - timeZone?: Temporal.TimeZoneLike; - calendar?: Temporal.CalendarLike; - }>; - export type Add = Partial>; - /** pre-configured format strings */ - export type OwnFormat = Mutable>; - /** mapping of format names to instance-resolutions (string | number) */ - export type Formats = { - [K in keyof OwnFormat]: FormatType; - } & Record; - /** Enum registry of format strings */ - export type Format = Enum.wrap>; - /** mapping of terms to their resolved values */ - export type Terms = Property; - /** patterns that return a number */ - export type NumericPattern = '{yyyy}{mm}' | '{yyww}' | '{yyyy}{mm}{dd}' | '{wy}{ww}' | '{wy}'; - export type FormatType = K extends keyof OwnFormat ? (OwnFormat[K] extends NumericPattern ? number : string) : K extends NumericPattern ? number : string | number; - export type Modifier = '=' | '-' | '+' | '<' | '<=' | '-=' | '>' | '>=' | '+=' | 'this' | 'next' | 'prev' | 'last' | 'first' | undefined; - export type Relative = 'ago' | 'hence' | 'prior'; - export type mm = IntRange<0, 12>; - export type hh = IntRange<0, 24>; - export type mi = IntRange<0, 60>; - export type ss = IntRange<0, 60>; - export type ms = IntRange<0, 999>; - export type us = IntRange<0, 999>; - export type ns = IntRange<0, 999>; - export type ww = IntRange<1, 53>; - export type Duration = NonOptional & Record<"iso", string> & Record<"sign", number> & Record<"blank", boolean> & Record<"unit", string | undefined>; - export type WEEKDAY = enums.WEEKDAY; - export type WEEKDAYS = enums.WEEKDAYS; - export type MONTH = enums.MONTH; - export type MONTHS = enums.MONTHS; - export type DURATION = enums.DURATION; - export type DURATIONS = enums.DURATIONS; - export type COMPASS = enums.COMPASS; - export type ELEMENT = enums.ELEMENT; - export type Weekday = enums.Weekday; - export type Month = enums.Month; - export type Element = enums.Element; - /** Type for consistency in expected arguments for helper functions */ - export type Params = { - (tempo?: Tempo.DateTime, options?: Tempo.Options): T; - (options: Tempo.Options): T; - }; - export {}; -} -type Fmt = { - (fmt: F, tempo?: Tempo.DateTime, options?: Tempo.Options): Tempo.FormatType; - (fmt: F, options: Tempo.Options): Tempo.FormatType; -}; -/** check valid Tempo */ export declare const isTempo: (tempo?: unknown) => tempo is Tempo; -/** current timestamp (ts) */ export declare const getStamp: Tempo.Params; -/** create new Tempo */ export declare const getTempo: Tempo.Params; -/** format a Tempo */ export declare const fmtTempo: Fmt; -export {}; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js deleted file mode 100644 index e1a2cce3..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js +++ /dev/null @@ -1,1543 +0,0 @@ -import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from "tslib"; -import '#library/temporal.polyfill.js'; // side-effect runtime check for Temporal -// #region library modules~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -import { Logify } from '#library/logify.class.js'; -import { ifDefined } from '#library/object.library.js'; -import { secure } from '#library/utility.library.js'; -import { Immutable, Serializable } from '#library/class.library.js'; -import { asArray } from '#library/array.library.js'; -import { cleanify, stringify } from '#library/serialize.library.js'; -import { getStorage, setStorage } from '#library/storage.library.js'; -import { ownKeys, ownEntries, getAccessors, omit } from '#library/reflection.library.js'; -import { getProxy } from '#library/proxy.library.js'; -import { getContext, CONTEXT } from '#library/utility.library.js'; -import { asNumber, asInteger, isNumeric, ifNumeric } from '#library/number.library.js'; -import { pad, singular, toProperCase, trimAll } from '#library/string.library.js'; -import { getType, asType, isType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction } from '#library/type.library.js'; -import * as enums from '#tempo/tempo.config/tempo.enum.js'; -import registerTerms from '#tempo/tempo.config/terms/term.import.js'; -import { Match, Token, Snippet, Layout, Event, Period, Default, TimeZone } from '#tempo/tempo.config/tempo.default.js'; -import '#library/prototype.library.js'; // patch prototypes -// #region Const variables -/** key to use for storage / globalThis Symbol */ export const $Tempo = Symbol.for('$Tempo'); -/** current execution context*/ const Context = getContext(); -// #endregion Const variables -/** - * # Tempo - * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. - * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. - */ -let Tempo = (() => { - var _a, _Tempo_dbg, _Tempo_global, _Tempo_pending, _Tempo_usrCount, _Tempo_terms, _Tempo_proto, _Tempo_hasOwn, _Tempo_isLocal, _Tempo_create, _Tempo_setEvents, _Tempo_setPeriods, _Tempo_setSphere, _Tempo_isMonthDay, _Tempo_swapLayout, _Tempo_prefix, _Tempo_locale, _Tempo_setConfig, _Tempo_mdyLocales, _Tempo_setDiscovery, _Tempo_setPatterns, _Tempo_conformToGroups; - let _classDecorators = [Serializable, Immutable]; - let _classDescriptor; - let _classExtraInitializers = []; - let _classThis; - var Tempo = _a = class { - static { _classThis = this; } - static { __setFunctionName(this, "Tempo"); } - static { - const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; - __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); - Tempo = _classThis = _classDescriptor.value; - if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); - } - // #region Static enum properties~~~~~~~~~~~~~~~~~~~~~~~~~ - /** Weekday names (short-form) */ static get WEEKDAY() { return enums.WEEKDAY; } - /** Weekday names (long-form) */ static get WEEKDAYS() { return enums.WEEKDAYS; } - /** Month names (short-form) */ static get MONTH() { return enums.MONTH; } - /** Month names (long-form) */ static get MONTHS() { return enums.MONTHS; } - /** Time durations as seconds (singular) */ static get DURATION() { return enums.DURATION; } - /** Time durations as milliseconds (plural) */ static get DURATIONS() { return enums.DURATIONS; } - /** Quarterly Seasons */ static get SEASON() { return enums.SEASON; } - /** Compass cardinal points */ static get COMPASS() { return enums.COMPASS; } - /** Tempo to Temporal DateTime Units map */ static get ELEMENT() { return enums.ELEMENT; } - /** Pre-configured format {name -> string} pairs */ static get FORMAT() { return __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.formats; } - /** some useful Dates */ static get LIMIT() { return enums.LIMIT; } - static { - // #endregion - // #region Static private properties~~~~~~~~~~~~~~~~~~~~~~ - _Tempo_dbg = { value: new Logify('Tempo', { - debug: Default?.debug ?? false, - catch: Default?.catch ?? false - }) }; - } - static { - /** Tempo state for the global configuration */ _Tempo_global = { value: {} }; - } - static { - /** a collection of parse rule-matches */ _Tempo_pending = { value: void 0 }; - } - static { - /** cache for next-available 'usr' Token key */ _Tempo_usrCount = { value: 0 }; - } - static { - /** mutable list of registered term plugins */ _Tempo_terms = { value: [] }; - } - static { - /** try to infer hemisphere using the timezone's daylight-savings setting */ - _Tempo_setSphere = { value: (shape, options) => { - if (isUndefined(shape.config.timeZone) || __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, options, 'sphere')) - return shape.config.sphere; // already specified or no timeZone to calculate from - // use a fixed date (2024-01-01) to compare offsets for hemisphere detection - const zdt = new Temporal.ZonedDateTime(BigInt(1_704_067_200) * BigInt(1_000_000_000), shape.config.timeZone); - const jan = zdt.with({ day: 1, month: 1 }).offsetNanoseconds; - const jun = zdt.with({ day: 1, month: 6 }).offsetNanoseconds; - const dst = Math.sign(jan - jun); // timeZone offset difference between Jan and Jun - switch (dst) { - case -1: - return Tempo.COMPASS.North; // clock moves backward in Northern hemisphere - case 1: - return Tempo.COMPASS.South; // clock moves forward in Southern hemisphere - case 0: - default: - return void 0; // timeZone does not observe DST - } - } }; - } - static { - /** properCase week-day / calendar-month */ - _Tempo_prefix = { value: (str) => toProperCase(String(str).substring(0, 3)) }; - } - static { - /** get first Canonical name of a supplied locale */ - _Tempo_locale = { value: (locale) => { - let language; - try { // lookup locale - language = Intl.getCanonicalLocales(locale.replace('_', '-'))[0]; - } - catch (error) { } // catch unknown locale - const global = Context.global; - return language ?? - global?.navigator?.languages?.[0] ?? // fallback to current first navigator.languages[] - global?.navigator?.language ?? // else navigator.language - Default.locale ?? // else default locale - locale; // cannot determine locale - } }; - } - // #endregion Static private methods - // #region Static public methods~~~~~~~~~~~~~~~~~~~~~~~~~~ - /** - * Bootstrap the library with a Custom Global Discovery object. - * - * This replaces the manual `globalThis[Symbol.for($Tempo)] = { ... }` pattern - * and automatically calls `Tempo.init()` to apply the discovered configuration. - * - * @param config - The Global Discovery object to register. - * @returns The resolved global configuration. - */ - static discover(config) { - globalThis[$Tempo] = config; - return this.init(); - } - /** - * Initializes the global default configuration for all subsequent `Tempo` instances. - * - * Settings are inherited in this priority: - * 1. Reasonable library defaults (defined in tempo.config.js) - * 2. Persistent storage (e.g. localStorage), if available. - * 3. `options` provided to this method. - * - * @param options - Configuration overrides to apply globally. - * @returns The resolved global configuration. - */ - static init(options = {}) { - if (isEmpty(options)) { // if no options supplied, reset all - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse = { - snippet: Object.assign({}, Snippet), - layout: Object.assign({}, Layout), - event: Object.assign({}, Event), - period: Object.assign({}, Period), - mdyLocales: __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_mdyLocales).call(Tempo, Default.mdyLocales), - mdyLayouts: asArray(Default.mdyLayouts), - pivot: Default.pivot, - }; - const { timeZone, calendar } = Intl.DateTimeFormat().resolvedOptions(); - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config = Object.assign({}, omit({ ...Default }, ...enums.PARSE.keys()), // use Default as base, omit parse-related - { - calendar, - timeZone, - locale: __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_locale).call(Tempo), - discovery: Symbol.keyFor($Tempo), - formats: Object.create(enums.FORMAT), - scope: 'global' - }); - __classPrivateFieldSet(Tempo, _classThis, 0, "f", _Tempo_usrCount); // reset user-key counter - for (const key of Object.keys(Token)) // purge user-allocated Tokens - if (key.startsWith('usr.')) // only remove 'usr.' prefixed keys - delete Token[key]; - Tempo.addTerm(...registerTerms); // register built-in term plugins - const storeKey = Symbol.keyFor($Tempo); - __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), { store: storeKey, discovery: storeKey, scope: 'global' }, Tempo.readStore(storeKey), // allow for storage-values to overwrite - __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), $Tempo)); - } - else { - const discovery = options.discovery ?? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.discovery ?? Symbol.keyFor($Tempo); - __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setDiscovery).call(Tempo, __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global), discovery), options); - } - if (Context.type === CONTEXT.Browser || options.debug === true) - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(Tempo.config, 'Tempo:', __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config); - return Tempo.config; - } - /** release global config and reset library to defaults */ - static [(_Tempo_proto = function _Tempo_proto(obj) { return Object.getPrototypeOf(obj); }, _Tempo_hasOwn = function _Tempo_hasOwn(obj, key) { return Object.hasOwn(obj, key); }, _Tempo_isLocal = function _Tempo_isLocal(shape) { return shape.config.scope === 'local'; }, _Tempo_create = function _Tempo_create(obj, name) { return Object.create(__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, obj)[name]); }, _Tempo_setEvents = function _Tempo_setEvents(shape) { - const events = ownEntries(shape.parse.event, true); - if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'event') && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'isMonthDay')) - return; // no local change needed - const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal - const groups = events - .map(([pat, _], idx) => `(?<${src}evt${idx}>${pat})`) // assign a number to the pattern - .join('|'); // make an 'Or' pattern for the event-keys - if (groups) { - const protoEvt = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.evt]?.source; - if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || groups !== protoEvt) { - if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet')) - shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'snippet'); - Object.defineProperty(shape.parse.snippet, Token.evt, { - value: new RegExp(groups), - enumerable: true, - writable: true, - configurable: true - }); - } - } - if (shape.parse.isMonthDay) { - const protoDt = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.layout)[Token.dt]; - const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})'; - if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || localDt !== protoDt) { - if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout')) - shape.parse.layout = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'layout'); - Object.defineProperty(shape.parse.layout, Token.dt, { - value: localDt, - enumerable: true, - writable: true, - configurable: true - }); - } - } - }, _Tempo_setPeriods = function _Tempo_setPeriods(shape) { - const periods = ownEntries(shape.parse.period, true); - if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'period')) - return; // no local change needed - const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal - const groups = periods - .map(([pat, _], idx) => `(?<${src}per${idx}>${pat})`) // {pattern} is the 1st element of the tuple - .join('|'); // make an 'or' pattern for the period-keys - if (groups) { - const protoPer = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse.snippet)[Token.per]?.source; - if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) || groups !== protoPer) { - if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet')) - shape.parse.snippet = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, 'snippet'); - Object.defineProperty(shape.parse.snippet, Token.per, { - value: new RegExp(groups), - enumerable: true, - writable: true, - configurable: true - }); - } - } - }, _Tempo_isMonthDay = function _Tempo_isMonthDay(shape) { - const monthDay = [...asArray(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.mdyLocales)]; - if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'mdyLocales')) - monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global) - return monthDay.some(mdy => { - const tzs = mdy.timeZones ?? mdy.getTimeZones?.() ?? []; - return tzs.includes(shape.config.timeZone); - }); - }, _Tempo_swapLayout = function _Tempo_swapLayout(shape) { - const layouts = ownEntries(shape.parse.layout); // get entries of Layout Record - const swap = shape.parse.mdyLayouts; // get the swap-tuple - let chg = false; // no need to rebuild, if no change - swap - .forEach(([dmy, mdy]) => { - const idx1 = layouts.findIndex(([key]) => key.description === dmy); // 1st swap element exists in {layouts} - const idx2 = layouts.findIndex(([key]) => key.description === mdy); // 2nd swap element exists in {layouts} - if (idx1 === -1 || idx2 === -1) - return; // no pair to swap - const swap1 = (idx1 < idx2) && shape.parse.isMonthDay; // we prefer {mdy} and the 1st tuple was found earlier than the 2nd - const swap2 = (idx1 > idx2) && !shape.parse.isMonthDay; // we dont prefer {mdy} and the 1st tuple was found later than the 2nd - if (swap1 || swap2) { // since {layouts} is an array, ok to swap by-reference - [layouts[idx1], layouts[idx2]] = [layouts[idx2], layouts[idx1]]; - chg = true; - } - }); - if (chg) - shape.parse.layout = Object.fromEntries(layouts); // rebuild Layout in new parse order - }, _Tempo_setConfig = function _Tempo_setConfig(shape, ...options) { - const mergedOptions = Object.assign({}, ...options); - if (isEmpty(mergedOptions)) // nothing to do - return; - if (mergedOptions.store) // check for local-storage - Object.assign(mergedOptions, { ...Tempo.readStore(mergedOptions.store), ...mergedOptions }); - /** helper to normalize snippet/layout Options into the target Config */ - const collect = (target, value, convert) => { - const itm = asType(value); - target ??= {}; - switch (itm.type) { - case 'Object': - ownEntries(itm.value) - .forEach(([k, v]) => target[Tempo.getSymbol(k)] = convert(v)); - break; - case 'String': - case 'RegExp': - target[Tempo.getSymbol()] = convert(itm.value); - break; - case 'Array': - itm.value.forEach(elm => collect(target, elm, convert)); - break; - } - }; - ownEntries(mergedOptions) - .forEach(([optKey, optVal]) => { - if (isUndefined(optVal)) - return; // skip undefined values - const arg = asType(optVal); - switch (optKey) { - case 'snippet': - case 'layout': - case 'event': - case 'period': - // lazy-shadowing: only create local object if it doesn't already exist on local shape - if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, optKey)) - shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_create).call(Tempo, shape.parse, optKey); - const rule = shape.parse[optKey]; - if (['snippet', 'layout'].includes(optKey)) { - collect(rule, arg.value, v => optKey === 'snippet' - ? isRegExp(v) ? v : new RegExp(v) - : isRegExp(v) ? v.source : v); - } - else { - asArray(arg.value) - .forEach(elm => ownEntries(elm).forEach(([key, val]) => rule[key] = val)); - } - break; - case 'mdyLocales': - shape.parse[optKey] = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_mdyLocales).call(Tempo, arg.value); - break; - case 'mdyLayouts': // these are the 'layouts' that need to swap parse-order - shape.parse[optKey] = asArray(arg.value); - break; - case 'pivot': - shape.parse["pivot"] = Number(arg.value); - break; - case 'config': - __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, shape, arg.value); - break; - case 'timeZone': - const zone = String(arg.value).toLowerCase(); - shape.config.timeZone = TimeZone[zone] ?? arg.value; - break; - case 'formats': - if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.config, 'formats')) - shape.config.formats = shape.config.formats.extend({}); // shadow parent prototype - if (isObject(arg.value)) - shape.config.formats = shape.config.formats.extend(arg.value); - break; - case 'discovery': - shape.config.discovery = isSymbol(optVal) ? Symbol.keyFor(optVal) : optVal; - break; - case 'plugins': - asArray(optVal).forEach(p => this.extend(p)); - break; - case 'anchor': - break; // internal anchor used for relativity parsing - default: // else just add to config - Object.assign(shape.config, { [optKey]: optVal }); - break; - } - }); - const isMonthDay = __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isMonthDay).call(Tempo, shape); - if (isMonthDay !== __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_proto).call(Tempo, shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local' - shape.parse.isMonthDay = isMonthDay; - shape.config.sphere = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_setSphere).call(Tempo, shape, mergedOptions); - if (isDefined(shape.parse.mdyLayouts)) - __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_swapLayout).call(Tempo, shape); - if (isDefined(shape.parse.event)) - __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setEvents).call(Tempo, shape); - if (isDefined(shape.parse.period)) - __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setPeriods).call(Tempo, shape); - __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setPatterns).call(Tempo, shape); // setup Regex DateTime patterns - }, _Tempo_mdyLocales = function _Tempo_mdyLocales(value) { - return asArray(value) - .map(mdy => new Intl.Locale(mdy)) - .map(mdy => ({ locale: mdy.baseName, timeZones: mdy.getTimeZones?.() ?? [] })); - }, _Tempo_setDiscovery = function _Tempo_setDiscovery(shape, key = shape.config.discovery ?? $Tempo) { - const sym = isString(key) ? Symbol.for(key) : key; - const discovery = globalThis[sym]; - if (!isObject(discovery)) - return {}; - // 1. Process TimeZones (normalize to lowercase for lookup) - const timeZones = discovery.timeZones ?? {}; - for (const [key, value] of Object.entries(timeZones)) - TimeZone[key.toLowerCase()] = value; - // 2. Process Terms - if (discovery.terms) - Tempo.addTerm(...asArray(discovery.terms)); - // 3. Process Formats - if (discovery.formats) - shape.config.formats = shape.config.formats.extend(discovery.formats); - // 4. Process Plugins - if (discovery.plugins) - asArray(discovery.plugins).forEach(p => this.extend(p)); - // 4. Process Options - let opts = discovery.options || {}; - return isFunction(opts) ? opts() : opts; - }, _Tempo_setPatterns = function _Tempo_setPatterns(shape) { - const snippet = shape.parse.snippet; - // if local and no snippet or layout overrides, we can just use the prototype's patterns - if (__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_isLocal).call(Tempo, shape) && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'snippet') && !__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'layout')) - return; - // ensure we have our own Map to mutate (shadow if local) - if (!__classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_hasOwn).call(Tempo, shape.parse, 'pattern')) - shape.parse.pattern = new Map(); - shape.parse.pattern.clear(); // reset {pattern} Map - for (const [sym, layout] of ownEntries(shape.parse.layout, true)) - shape.parse.pattern.set(sym, Tempo.regexp(layout, snippet)); - }, Symbol.dispose)]() { Tempo.init(); } - /** - * Extends the Tempo class with new functionality. - * Plugins can add static or instance methods to the library. - */ - static extend(plugin, options) { - const p = plugin; - if (!p.installed) { - p(options, this, (val) => new this(val)); - p.installed = true; - } - return this; - } - /** Reads options from persistent storage (e.g., localStorage). */ - static readStore(key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { - return getStorage(key, {}); - } - /** Writes configuration into persistent storage. */ - static writeStore(config, key = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config.store) { - return setStorage(key, config); - } - /** lookup or registers a new `Symbol` for a given key. */ - static getSymbol(key) { - var _b, _c; - if (isUndefined(key)) { - const usr = `usr.${__classPrivateFieldSet(_b = Tempo, _classThis, (_c = __classPrivateFieldGet(_b, _classThis, "f", _Tempo_usrCount), ++_c), "f", _Tempo_usrCount)}`; // allocate a prefixed 'user' key - return Token[usr] = Symbol(usr); // add to Symbol register - } - if (isSymbol(key)) - return key; - if (isString(key) && key.includes('.')) { - const description = key.split('.').pop(); // use last segment as description - return Token[key] ??= Symbol(description); - } - return Token[key] ?? Symbol.for(`$Tempo.${key}`); - } - /** translates {layout} into an anchored, case-insensitive RegExp. */ - static regexp(layout, snippet) { - // helper function to replace {name} placeholders with their corresponding snippets - function matcher(str, depth = 0) { - if (depth > 12) - return isRegExp(str) ? str.source : str; // depth guard - let source = isRegExp(str) ? str.source : str; - if (isRegExpLike(source)) // string that looks like a RegExp - source = source.substring(1, source.length - 1); // remove the leading/trailing "/" - if (source.startsWith('^') && source.endsWith('$')) - source = source.substring(1, source.length - 1); // remove the leading/trailing anchors (^ $) - return source.replace(Match.braces, (match, name) => { - const token = Tempo.getSymbol(name); // get the symbol for this {name} - const customs = snippet?.[token]?.source ?? snippet?.[name]?.source; - const globals = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.snippet[token]?.source ?? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.snippet[name]?.source; - const layout = Layout[token]; // get resolution source (layout) - let res = customs ?? globals ?? layout; // get the snippet/layout source - if (isNullish(res) && name.includes('.')) { // if no definition found, try fallback - const prefix = name.split('.')[0]; // get the base token name - const pToken = Tempo.getSymbol(prefix); - res = snippet?.[pToken]?.source ?? snippet?.[prefix]?.source - ?? Snippet[pToken]?.source ?? Snippet[prefix]?.source - ?? Layout[pToken]; - } - if (res && name.includes('.')) { // wrap dotted extensions for identification - const safeName = name.replace(/\./g, '_'); - if (!res.startsWith(`(?<${safeName}>`)) - res = `(?<${safeName}>${res})`; - } - return (isNullish(res) || res === match) // if no definition found, - ? match // return the original match - : matcher(res, depth + 1); // else recurse to see if snippet contains embedded "{}" pairs - }); - } - layout = matcher(layout); // initiate the layout-parse - return new RegExp(`^(${layout})$`, 'i'); // translate the source into a regex - } - /** Compares two `Tempo` instances or date-time values. */ - static compare(tempo1, tempo2) { - const one = new Tempo(tempo1), two = new Tempo(tempo2); - return Number((one.nano > two.nano) || -(one.nano < two.nano)) + 0; - } - /** global Tempo configuration */ - static get config() { - return getProxy(omit({ ...__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config }, 'value')); - } - /** global discovery configuration */ - static get discovery() { - const sym = Symbol.for(this.config.discovery); - return getProxy(omit({ ...globalThis[sym], scope: 'discovery' }, 'value')); - } - /** - * Returns a snapshot of the configuration layers used by Tempo. - * Useful for debugging how the final configuration is built. - */ - static get options() { - const keyFor = this.config.store ?? Symbol.keyFor($Tempo); - return { - default: this.default, - discovery: this.discovery, - storage: getProxy(Object.assign({ key: keyFor, scope: 'storage' }, omit(Tempo.readStore(keyFor), 'value'))), - global: this.config, - }; - } - static from(tempo, options) { return new this(tempo, options); } - static now() { return Temporal.Now.instant().epochNanoseconds; } - /** static Tempo.terms getter */ - static get terms() { - return secure(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) - .map(({ define, ...rest }) => rest)); // omit the 'define' method - } - /** Registers a new term plugin (available on `tempo.term`). See `doc/tempo.md`. */ - static addTerm(...plugin) { - asArray(plugin) - .flat(1) - .forEach(p => { - if (!__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).some(t => t.key === p.key)) // check for duplicate key - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms).push(p); // append; silently ignore duplicates - }); - } - /** static Tempo properties getter */ - static get properties() { - return secure(getAccessors(Tempo) - .filter(acc => getType(acc) !== 'Symbol')); // omit any Symbol properties - } - /** Tempo initial default settings */ - static get default() { - return secure({ ...Default, scope: 'default', timeZone: TimeZone }); - } - /** - * configuration governing the static 'rules' used when parsing Tempo.DateTime argument - */ - static get parse() { - const parse = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse; - return secure({ - ...parse, // spread primitives like {pivot} - snippet: { ...parse.snippet }, // spread nested objects - layout: { ...parse.layout }, - event: { ...parse.event }, - period: { ...parse.period }, - mdyLocales: [...parse.mdyLocales], - mdyLayouts: [...parse.mdyLayouts], - }); - } - /** iterate over Tempo properties */ - static [(_Tempo_conformToGroups = function _Tempo_conformToGroups(tempo) { - const groups = {}; - if ('year' in tempo) { - groups.yy = tempo.year.toString().padStart(4, '0'); - groups.mm = tempo.month.toString().padStart(2, '0'); - groups.dd = tempo.day.toString().padStart(2, '0'); - } - if ('hour' in tempo) { - groups.hh = tempo.hour.toString().padStart(2, '0'); - groups.mi = tempo.minute.toString().padStart(2, '0'); - groups.ss = tempo.second.toString().padStart(2, '0'); - groups.ff = tempo.nanosecond.toString().padStart(9, '0'); - } - return groups; - }, Symbol.iterator)]() { - return Tempo.properties[Symbol.iterator](); // static Iterator over array of 'getters' - } - // #endregion Static public methods - // #region Instance symbols~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - /** allow for auto-convert of Tempo to BigInt, Number or String */ - [Symbol.toPrimitive](hint) { - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.config, getType(this), '.hint: ', hint); - switch (hint) { - case 'string': return this.toString(); // ISO 8601 string - case 'number': return this.epoch.ms; // Unix epoch (milliseconds) - default: return this.nano; // Unix epoch (nanoseconds) - } - } - /** iterate over instance formats */ - [Symbol.iterator]() { - return ownEntries(this.#fmt)[Symbol.iterator](); // instance Iterator over tuple of FormatType[] - } - get [Symbol.toStringTag]() { - return 'Tempo'; // hard-coded to avoid minification mangling - } - // #endregion Instance symbols - // #region Instance properties~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - /** constructor tempo */ #tempo; - /** constructor options */ #options = {}; - /** instantiation Temporal Instant */ #now; - /** underlying Temporal ZonedDateTime */ #zdt; - /** temporary anchor used during parsing */ #anchor; - /** prebuilt formats, for convenience */ #fmt = {}; - /** instance term plugins */ #term = Object.create(null); - /** instance values to complement static values */ #local = { - /** instance configuration */ config: {}, - /** instance parse rules (only populated if provided) */ parse: { result: [] } - }; - constructor(tempo, options = {}) { - this.#now = Temporal.Now.instant(); // stash current Instant - [this.#tempo, this.#options] = this.#swap(tempo, options); // swap arguments around, if arg1=Options or Temporal-like - this.#setLocal(this.#options); // parse the local options looking for overrides to Tempo.#global.config - // we now have all the info we need to instantiate a new Tempo - try { - this.#anchor = this.#options.anchor; - this.#zdt = this.#parse(this.#tempo, this.#anchor); // attempt to interpret the DateTime arg - if (['iso8601', 'gregory'].includes(this.#local.config['calendar'])) { - for (const key of this.#local.config.formats.keys()) - Object.assign(this.#fmt, { [key]: this.format(key) }); - } - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_terms) // add the plug-in getters for the pre-defined Terms to the instance - .forEach(({ key, scope, define }) => { - this.#setTerm(this, key, define, true); // add a getter which returns the key-field only - this.#setTerm(this, scope, define, false); // add a getter which returns a range-object - }); - if (isDefined(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending))) { // are we mutating with 'set()' ? - this.#local.parse.result.unshift(...__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending)); // prepend collected parse-matches - __classPrivateFieldSet(Tempo, _classThis, void 0, "f", _Tempo_pending); // and reset mutating-flag - } - secure(this.#fmt); // prevent mutations - secure(this.#term); // secure the initial object with getters - secure(this.#local.config); - secure(this.#local.parse); - } - catch (err) { - console.error('Tempo Constructor Error:', err); - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.config, `Cannot create Tempo: ${err.message}\n${err.stack}`); - return {}; // return empty Object - } - } - // This function has be defined within the Tempo class (and not imported from another module) because it references a private-variable - /** this will add a getter on the instance #term private field */ - #setTerm(self, name, define, isKeyOnly) { - if (isDefined(name) && isDefined(define)) { - Object.defineProperty(self.#term, name, { - configurable: false, - enumerable: false, - get: function () { - const value = define.call(self, isKeyOnly); // evaluate the term range-lookup - self.#term = secure(Object.create(self.#term, { - [name]: { - value, - configurable: false, - writable: false, - enumerable: true - } - })); - return secure(value); - } - }); - } - } - // #endregion Constructor - // #region Instance public accessors~~~~~~~~~~~~~~~~~~~~~~ - /** 4-digit year (e.g., 2024) */ get yy() { return this.toDateTime().year; } - /** 4-digit ISO week-numbering year */ get wy() { return this.ww === 1 && this.mm === Tempo.MONTH.Dec ? this.yy + 1 : (this.ww >= 52 && this.mm === Tempo.MONTH.Jan ? this.yy - 1 : this.yy); } - /** Month number: Jan=1, Dec=12 */ get mm() { return this.toDateTime().month; } - /** ISO week number of the year */ get ww() { return this.toDateTime().weekOfYear; } - /** Day of the month (1-31) */ get dd() { return this.toDateTime().day; } - /** Day of the month (alias for `dd`) */ get day() { return this.toDateTime().day; } - /** Hour of the day (0-23) */ get hh() { return this.toDateTime().hour; } - /** Minutes of the hour (0-59) */ get mi() { return this.toDateTime().minute; } - /** Seconds of the minute (0-59) */ get ss() { return this.toDateTime().second; } - /** Milliseconds of the second (0-999) */ get ms() { return this.toDateTime().millisecond; } - /** Microseconds of the millisecond (0-999) */ get us() { return this.toDateTime().microsecond; } - /** Nanoseconds of the microsecond (0-999) */ get ns() { return this.toDateTime().nanosecond; } - /** Fractional seconds (e.g., 0.123456789) */ get ff() { return +(`0.${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`); } - /** IANA Time Zone ID (e.g., 'Australia/Sydney') */ get tz() { return this.toDateTime().timeZoneId; } - /** Unix timestamp (defaults to milliseconds) */ get ts() { return this.epoch[this.#local.config.timeStamp]; } - /** Short month name (e.g., 'Jan') */ get mmm() { return Tempo.MONTH.keyOf(this.#zdt.month); } - /** Full month name (e.g., 'January') */ get mon() { return Tempo.MONTHS.keyOf(this.#zdt.month); } - /** Short weekday name (e.g., 'Mon') */ get www() { return Tempo.WEEKDAY.keyOf(this.#zdt.dayOfWeek); } - /** Full weekday name (e.g., 'Monday') */ get wkd() { return Tempo.WEEKDAYS.keyOf(this.toDateTime().dayOfWeek); } - /** ISO weekday number: Mon=1, Sun=7 */ get dow() { return this.toDateTime().dayOfWeek; } - /** Nanoseconds since Unix epoch (BigInt) */ get nano() { return this.toDateTime().epochNanoseconds; } - /** current Tempo configuration */ - get config() { - return getProxy(omit({ ...this.#local.config }, 'scope', 'value', 'anchor')); - } - /** Instance-specific parse rules (merged with global) */ get parse() { return this.#local.parse; } - /** Object containing results from all term plugins */ get term() { return getProxy(this.#term); } - /** Formatted results for all pre-defined format codes */ get fmt() { return this.#fmt; } - /** units since epoch */ get epoch() { - return secure({ - /** seconds since epoch */ ss: Math.trunc(this.toDateTime().epochMilliseconds / 1_000), - /** milliseconds since epoch */ ms: this.toDateTime().epochMilliseconds, - /** microseconds since epoch */ us: Number(this.toDateTime().epochNanoseconds / BigInt(1_000)), - /** nanoseconds since epoch */ ns: this.toDateTime().epochNanoseconds, - }); - } - // #endregion Instance public accessors - // #region Instance private accessors - /** - * @Immutable class decorators wrap the class but leave internal lexical bindings pointing to the original, undecorated class. - * To ensure new instances returned by instance methods are properly frozen, - * we must instantiate internally from the decorated wrapper (which is bound to `this.constructor`) - * rather than using `new Tempo(..)`. - */ - get #Tempo() { return this.constructor; } - /** time duration until another date-time */ until(optsOrDate, optsOrUntil) { return this.#until(optsOrDate, optsOrUntil); } - /** time elapsed since another date-time */ since(optsOrDate, optsOrUntil) { return this.#since(optsOrDate, optsOrUntil); } - /** applies a format to the instance. See `doc/tempo.md`. */ format(fmt) { return this.#format(fmt); } - /** returns a new `Tempo` with specific duration added. */ add(tempo, options) { return this.#add(tempo, options); } - /** returns a new `Tempo` with specific offsets. */ set(tempo, options) { return this.#set(tempo, options); } - /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config); } - /** returns the underlying Temporal.ZonedDateTime */ toDateTime() { return this.#zdt ?? this.#anchor ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone); } - /** returns a Temporal.PlainDate representation */ toPlainDate() { return this.toDateTime().toPlainDate(); } - /** returns a Temporal.PlainTime representation */ toPlainTime() { return this.toDateTime().toPlainTime(); } - /** returns a Temporal.PlainDateTime representation */ toPlainDateTime() { return this.toDateTime().toPlainDateTime(); } - /** returns the underlying Temporal.Instant */ toInstant() { return this.toDateTime().toInstant(); } - /** the date-time as a standard `Date` object. */ toDate() { return new Date(this.toDateTime().round({ smallestUnit: enums.ELEMENT.ms }).epochMilliseconds); } - /** the ISO8601 string representation of the date-time. */ toString() { return this.toPlainDateTime().toString({ calendarName: 'never' }); } - /** Custom JSON serialization for `JSON.stringify`. */ toJSON() { return omit({ ...this.#local.config, value: this.toString() }, 'scope', 'store'); } - /** `true` if the underlying date-time is valid. */ isValid() { return !isEmpty(this); } - // #endregion Instance public methods - // #region Instance private methods~~~~~~~~~~~~~~~~~~~~~~~ - /** setup local 'config' and 'parse' rules (prototype-linked to global) */ - #setLocal(options) { - // setup local config (prototype-linked to global config) - this.#local.config = Object.create(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).config); - Object.assign(this.#local.config, { scope: 'local' }); - // setup local parse rules (prototype-linked to global parse) - this.#local.parse = Object.create(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse); - this.#local.parse.result = []; - __classPrivateFieldGet(Tempo, _classThis, "m", _Tempo_setConfig).call(Tempo, this.#local, options); // set #local config - } - /** parse DateTime input */ - #parse(tempo, dateTime) { - const today = (dateTime ?? this.#now.toZonedDateTimeISO(this.#local.config.timeZone)) - .withTimeZone(this.#local.config.timeZone); - const { type, value } = this.#conform(tempo, today, isDefined(dateTime)); - // evaluate latest timezone / calendar (after #conform which might have updated them) - const { timeZone, calendar } = this.#local.config; - const tz = isString(timeZone) ? timeZone : timeZone.id ?? timeZone.timeZoneId; - const cal = isString(calendar) ? calendar : calendar.id ?? calendar.calendarId; - if (isEmpty(this.#local.parse.result) && isUndefined(__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending))) // #conform() didn't find any matches - this.#local.parse.result = [{ type, value }]; - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'parse', `{type: ${type}, value: ${value}}`); // show what we're parsing - switch (type) { - case 'Null': - case 'Void': - case 'Empty': - case 'Undefined': - return today; - case 'String': // String which didn't conform to a Tempo.pattern - try { - const str = value.replace(/Z$/, ''); // requested Z-stripping for adoption - const zdt = Temporal.ZonedDateTime.from(str.includes('[') ? str : `${str}[${tz}]`); - if (this.#local) - this.#local.config.timeZone = zdt.timeZoneId; - return zdt; - } - catch (err) { // else see if Date.parse can parse value - this.#result({ type: 'String', value }, { match: 'Date.parse' }); - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, 'Cannot detect DateTime; fallback to Date.parse'); - if (Match.date.test(value)) { - try { - return Temporal.PlainDate.from(value).toZonedDateTime(tz).withCalendar(cal); - } - catch { /* ignore and fallback */ } - } - try { - return Temporal.PlainDateTime.from(value).toZonedDateTime(tz).withCalendar(cal); - } - catch { /* ignore and fallback to Date.parse */ } - const date = new Date(value.toString()); - if (isNaN(date.getTime())) - return __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Cannot parse Date: "${value}"`); - return Temporal.ZonedDateTime // adopt instance timezone - .from(`${date.toISOString().substring(0, 23)}[${tz}]`) - .withCalendar(cal); - } - case 'Temporal.ZonedDateTime': // ZonedDateTime object: convert to instance timezone - return (value.timeZoneId === tz && value.calendarId === cal) - ? value - : value.withTimeZone(tz).withCalendar(cal); - case 'Temporal.PlainDate': - case 'Temporal.PlainDateTime': - return value - .toZonedDateTime(tz) - .withCalendar(cal); - case 'Temporal.PlainTime': - return today.withPlainTime(value); - case 'Temporal.PlainYearMonth': // assume current day, else end-of-month - return value - .toPlainDate({ day: Math.min(today.day, value.daysInMonth) }) - .toZonedDateTime(tz) - .withCalendar(cal); - case 'Temporal.PlainMonthDay': // assume current year - return value - .toPlainDate({ year: today.year }) - .toZonedDateTime(tz) - .withCalendar(cal); - case 'Temporal.Instant': - return value - .toZonedDateTimeISO(tz) - .withCalendar(cal); - case 'Tempo': - return value - .toDateTime() - .withTimeZone(tz) - .withCalendar(cal); // apply instance timezone to cloned Tempo - case 'Date': - return Temporal.Instant.fromEpochMilliseconds(value.getTime()) - .toZonedDateTimeISO(tz) - .withCalendar(cal); - case 'Number': // Number which didn't conform to a Tempo.pattern - const [seconds = BigInt(0), suffix = BigInt(0)] = value.toString().split('.').map(BigInt); - const nano = BigInt(suffix.toString().substring(0, 9).padEnd(9, '0')); - return Temporal.Instant.fromEpochNanoseconds(seconds * BigInt(1_000_000_000) + nano) - .toZonedDateTimeISO(tz) - .withCalendar(cal); - case 'BigInt': // BigInt is not conformed against a Tempo.pattern - return Temporal.Instant.fromEpochNanoseconds(value) - .toZonedDateTimeISO(tz) - .withCalendar(cal); - default: - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected Tempo parameter type: ${type}, ${String(value)}`); - return today; - } - } - /** resolve constructor / method arguments */ - #swap(tempo, options = {}) { - return this.#isOptions(tempo) - ? [tempo.value, { ...tempo }] - : [tempo, { ...options }]; - } - /** check if we've been given a Tempo Options object */ - #isOptions(arg) { - if (!isObject(arg) || arg.constructor !== Object) - return false; - const keys = ownKeys(arg); // if it contains any 'mutation' keys, then it's not (just) an options object - if (keys.some(key => enums.MUTATION.has(key))) - return false; - return keys - .some(key => enums.OPTION.has(key)); - } - /** check if we've been given a ZonedDateTimeLike object */ - #isZonedDateTimeLike(tempo) { - if (!isObject(tempo) || isEmpty(tempo)) - return false; - // if it contains any 'options' keys, it's not a ZonedDateTime - const keys = ownKeys(tempo); - if (keys.some(key => enums.OPTION.has(key) && key !== 'value')) - return false; - // we include {value} to allow for Tempo instances - return keys - .filter(isString) - .every(key => enums.ZONED_DATE_TIME.has(key)); - } - #result(...rest) { - const match = Object.assign({}, ...rest); // collect all object arguments - if (!isEmpty(match.groups)) { - if (isDefined(this.#anchor) && !match.isAnchored) - match.isAnchored = true; - (__classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_pending) ?? this.#local.parse.result).push(match); - } - } - /** evaluate 'string | number' input against known patterns */ - #conform(tempo, dateTime, isAnchored = false) { - const arg = asType(tempo); - const { type, value } = arg; - if (this.#isZonedDateTimeLike(tempo)) { // tempo is ZonedDateTime-ish object (throw away 'value' property) - const { timeZone, calendar, value, ...options } = tempo; - let zdt = !isEmpty(options) - ? dateTime.with({ ...options }) - : dateTime; - if (timeZone) - zdt = zdt.withTimeZone(timeZone); // optionally set timeZone - if (calendar) - zdt = zdt.withCalendar(calendar); // optionally set calendar - this.#result({ type: 'Temporal.ZonedDateTimeLike', value: zdt, match: 'Temporal.ZonedDateTimeLike' }); - return Object.assign(arg, { - type: 'Temporal.ZonedDateTime', // override {arg.type} - value: zdt, - }); - } - if (type !== 'String' && type !== 'Number') { - this.#result(arg, { match: type }); - return arg; - } - if (isFunction(value)) { - const res = value.call(this); - return this.#conform(res, dateTime, isAnchored); - } - const trim = trimAll(value); - if (type === 'String') { // if original value is String - if (isEmpty(trim)) { // don't conform empty string - this.#result(arg, { match: 'Empty' }); - return Object.assign(arg, { type: 'Empty' }); - } - if (isIntegerLike(trim)) { // if string representation of BigInt literal - this.#result(arg, { match: 'BigInt' }); - return Object.assign(arg, { type: 'BigInt', value: asInteger(trim) }); - } - } - else { // else it is a Number - if (trim.length <= 7) { // cannot reliably interpret small numbers: might be {ss} or {yymmdd} or {dmmyyyy} - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, 'Cannot safely interpret number with less than 8-digits: use string instead'); - return arg; - } - } - // const isSimpleIsoOrNumeric = typeof value === 'string' && (Match.date.test(value) || /^\d+$/.test(value)); - const map = this.#local.parse.pattern; - for (const [sym, pat] of map) { - const groups = this.#parseMatch(pat, trim); // determine pattern-match groups - if (isEmpty(groups)) - continue; // no match, so skip this iteration - this.#result(arg, { match: sym.description, groups: cleanify(groups) }); // stash the {key} of the pattern that was matched - dateTime = this.#parseZone(groups, dateTime); // resolve timezone early so events can use it - dateTime = this.#parseGroups(groups, dateTime); // mutate the {groups} object (resolves events/periods) - dateTime = this.#parseWeekday(groups, dateTime); // if {weekDay} pattern, calculate a calendar value - dateTime = this.#parseDate(groups, dateTime); // if {calendar}|{event} pattern, translate to date value - dateTime = this.#parseTime(groups, dateTime); // if {clock}|{period} pattern, translate to a time value - /** - * finished analyzing a matched pattern. - * rebuild {arg.value} into a ZonedDateTime - */ - // if no time-components were matched, strip time to midnight baseline - if (!isAnchored && !['hh', 'mi', 'ss', 'ff', 'mer', 'per'].some(key => isDefined(groups[key]))) - dateTime = dateTime.withPlainTime('00:00:00'); - Object.assign(arg, { type: 'Temporal.ZonedDateTime', value: dateTime }); - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'groups', groups); // show the resolved date-time elements - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).info(this.#local.config, 'pattern', sym.description); // show the pattern that was matched - break; // stop checking patterns - } - return arg; - } - /** apply a regex-match against a value, and clean the result */ - #parseMatch(pat, value) { - const groups = value.toString().match(pat)?.groups || {}; - ownEntries(groups) // remove undefined, NaN, null and empty values - .forEach(([key, val]) => isEmpty(val) && delete groups[key]); - return groups; - } - /** resolve {event} | {period} to their date | time values (mutates groups) */ - #parseGroups(groups, dateTime) { - this.#anchor = dateTime; // temporarily anchor the instance so events resolve relative to current state - try { - for (const key of ownKeys(groups)) { - const isEvent = Match.event.test(key); - const isPeriod = Match.period.test(key); - if (!isEvent && !isPeriod) - continue; - const idx = +key.substring(4); - const src = key.startsWith('g') ? (isEvent ? __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.event : __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_global).parse.period) : (isEvent ? this.#local.parse.event : this.#local.parse.period); - const entry = ownEntries(src, true)[idx]; - if (!entry) - continue; - const definition = entry[1]; - const res = isFunction(definition) ? definition.call(this).toString() : definition; - const resGroups = isEvent ? this.#parseEvent(res) : this.#parsePeriod(res); - Object.assign(groups, resGroups); - delete groups[key]; - } - } - finally { - this.#anchor = void 0; // reset anchor - } - // resolve month-names into month-numbers (some browsers do not allow month-names when parsing a Date) - if (isDefined(groups["mm"]) && !isNumeric(groups["mm"])) { - const mm = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_prefix).call(Tempo, groups["mm"]); // conform month-name - groups["mm"] = Tempo.MONTH.keys().findIndex((el) => el === mm).toString().padStart(2, '0'); - } - // Apply mutated groups to dateTime - if (isDefined(groups.yy) || isDefined(groups.mm) || isDefined(groups.dd)) - dateTime = this.#parseDate(groups, dateTime); - if (isDefined(groups.hh) || isDefined(groups.mi) || isDefined(groups.ss) || isDefined(groups.ff) || isDefined(groups.mer)) - dateTime = this.#parseTime(groups, dateTime); - return dateTime; - } - /** - * We expect similar offset-logic to apply to 'modifiers' when parsing a string DateTime. - * returns {adjust} to make, based on {modifier}, {offset}, and {period} - * - previous period - * + next period - * -3 three periods ago - * < prior to base-date (asIs) - * <= prior to base-date (plus one) - */ - #parseModifier({ mod, adjust, offset, period }) { - adjust = Math.abs(adjust); - switch (mod) { - case void 0: // no adjustment - case '=': - case 'this': // current period - return 0; - case '+': // next period - case 'next': - return adjust; - case '-': // previous period - case 'prev': - case 'last': - return -adjust; - case '<': // period before base-date - case 'ago': - return (period <= offset) - ? -adjust - : -(adjust - 1); - case '<=': // period before or including base-date - return (period < offset) - ? -adjust - : -(adjust - 1); - case '>': // period after base-date - case 'hence': - return (period > offset) - ? adjust - : (adjust - 1); - case '>=': // period after or including base-date - case '+=': - return (period >= offset) - ? adjust - : (adjust - 1); - default: // unexpected modifier - return 0; - } - } - /** - * if named-group 'wkd' detected (with optional 'mod', 'nbr', 'sfx' or time-units), then calc relative weekday offset - * | Example | Result | Note | - * | :--- | :---- | :---- | - * | `Wed` | Wed this week | might be earlier or later or equal to current day | - * | `-Wed` | Wed last week | same as new Tempo('Wed').add({ weeks: -1 }) | - * | `+Wed` | Wed next week | same as new Tempo('Wed').add({ weeks: 1 }) | - * | `-3Wed` | Wed three weeks ago | same as new Tempo('Wed').add({ weeks: -3 }) | - * | `', hh: '10', mer: 'pm'} - * we early-exit if we find anything other than time-units - */ - const time = ['hh', 'mi', 'ss', 'ms', 'us', 'ns', 'ff', 'mer']; - if (!ownKeys(rest) - .every(key => time.includes(key))) // non 'time-unit' keys detected - return dateTime; // this is not a true {weekDay} pattern, so early-exit - if (!isEmpty(mod) && !isEmpty(sfx)) { - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${sfx}'`); - return dateTime; // cannot provide both 'modifier' and 'suffix' - } - const weekday = __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_prefix).call(Tempo, wkd); // conform weekday-name - const adjust = +nbr; // how many weeks to adjust - const offset = Tempo.WEEKDAY.keys() // how far weekday is from today - .findIndex((el) => el === weekday); - const days = offset - dateTime.dayOfWeek // number of days to offset from dateTime - + (this.#parseModifier({ mod: mod ?? sfx, adjust, offset, period: dateTime.dayOfWeek }) * dateTime.daysInWeek); - delete groups["wkd"]; - delete groups["mod"]; - delete groups["nbr"]; - delete groups["sfx"]; - return dateTime - .add({ days }); // set new {day} - } - /** - * match input against date patterns - * @returns adjusted ZonedDateTime with resolved time-components - */ - #parseDate(groups, dateTime) { - const { mod, nbr = '1', afx, unt, yy, mm, dd } = groups; - if (isEmpty(yy) && isEmpty(mm) && isEmpty(dd) && isUndefined(unt)) - return dateTime; // return default - if (!isEmpty(mod) && !isEmpty(afx)) { - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).warn(this.#local.config, `Cannot provide both a modifier '${mod}' and suffix '${afx}'`); - return dateTime; - } - let { year, month, day } = this.#num({ - year: yy ?? dateTime.year, // supplied year, else current year - month: mm ?? dateTime.month, // supplied month, else current month - day: dd ?? dateTime.day, // supplied day, else current day - }); - // handle {unt} relative offset (e.g. '2 days ago') - if (unt) { - const adjust = +nbr; - const direction = (mod === '<' || mod === '-' || afx === 'ago') ? -1 : 1; - const plural = singular(unt) + 's'; - dateTime = dateTime.add({ [plural]: adjust * direction }); - delete groups["unt"]; - delete groups["nbr"]; - delete groups["afx"]; - delete groups["mod"]; - return dateTime; - } - // convert 2-digit year to 4-digits using 'pivot-year' (relative to current century) - if (year.toString().match(Match.twoDigit)) { // if {year} match just-two digits - const pivot = dateTime - .subtract({ years: this.#local.parse["pivot"] }) // pivot cutoff to determine century - .year % 100; // remainder - const century = Math.trunc(dateTime.year / 100); // current century - year += (century - Number(year >= pivot)) * 100; // now a four-digit year - } - // adjust the {year} if a Modifier is present - const adjust = +nbr; // how many years to adjust - const offset = Number(pad(month) + '.' + pad(day)); // the event month.day - const period = Number(pad(dateTime.month) + '.' + pad(dateTime.day + 1)); - year += this.#parseModifier({ mod: mod ?? afx, adjust, offset, period }); - Object.assign(groups, { yy: year, mm: month, dd: day }); - delete groups["mod"]; - delete groups["nbr"]; - delete groups["afx"]; - // all date-components are now set; check for overflow in case past end-of-month - return Temporal.PlainDate.from({ year, month, day }, { overflow: 'constrain' }) - .toZonedDateTime(dateTime.timeZoneId) // adjust to constrained date - .withPlainTime(dateTime.toPlainTime()); // restore the time - } - /** match input against 'tm' pattern (returns adjusted ZonedDateTime) */ - #parseTime(groups = {}, dateTime) { - if (isUndefined(groups["hh"])) // must contain 'time' with at least {hh} - return dateTime; - let { hh = 0, mi = 0, ss = 0, ms = 0, us = 0, ns = 0 } = this.#num(groups); - if (hh >= 24) { - dateTime = dateTime.add({ days: Math.trunc(hh / 24) }); // move the date forward number of days to offset - hh %= 24; // midnight is '00:00' on the next-day - } - if (isDefined(groups["ff"])) { // {ff} is fractional seconds and overrides {ms|us|ns} - const ff = groups["ff"].substring(0, 9).padEnd(9, '0'); - ms = +ff.substring(0, 3); - us = +ff.substring(3, 6); - ns = +ff.substring(6, 9); - } - if (groups["mer"]?.toLowerCase() === 'pm' && hh < 12 && (hh + mi + ss + ms + us + ns) > 0) - hh += 12; // anything after midnight and before midday - if (groups["mer"]?.toLowerCase() === 'am' && hh >= 12) - hh -= 12; // anything after midday - return dateTime // return the computed time-values - .withPlainTime({ hour: hh, minute: mi, second: ss, millisecond: ms, microsecond: us, nanosecond: ns }); - } - /** - * apply a timezone or calendar bracket to the current ZonedDateTime - * normalization is applied to ensure 'Z' is treated as 'UTC' - */ - #parseZone(groups, dateTime) { - const tzd = groups["tzd"]?.replace(Match.zed, 'UTC'); // normalize timezone/offset - const brk = groups["brk"]?.replace(Match.zed, 'UTC'); // handle bracketed timezone - const zone = brk || tzd; - if (zone && zone !== dateTime.timeZoneId && !zone.startsWith('u-ca=')) { - if (this.#local) - this.#local.config.timeZone = zone; // update local config if exists - dateTime = dateTime.toPlainDateTime().toZonedDateTime(zone); // adopt timezone override (stable) - } - const cal = groups["cal"]; - if (cal && cal !== dateTime.calendarId) { - const calendar = cal.startsWith('u-ca=') ? cal.substring(5) : cal; - this.#local.config.calendar = calendar; - dateTime = dateTime.withCalendar(calendar); - } - delete groups["brk"]; - delete groups["cal"]; - delete groups["tzd"]; - return dateTime; - } - /** match an {event} string against a date pattern */ - #parseEvent(evt) { - const groups = {}; - const pats = this.#local.parse.isMonthDay // first find out if we have a US-format timeZone - ? ['mdy', 'dmy', 'ymd'] // if so, try {mdy} before {dmy} - : ['dmy', 'mdy', 'ymd']; // else try {dmy} before {mdy} - for (const pat of pats) { - const reg = this.#getPattern(pat); - if (isDefined(reg)) { - const match = this.#parseMatch(reg, evt); - if (!isEmpty(match)) { - this.#result({ type: 'Event', value: evt, match: pat, groups: cleanify(match) }); - Object.assign(groups, match); - } - } - if (!isEmpty(groups)) - break; // return on the first matched pattern - } - return groups; // overlay the match date-components - } - /** match a {period} string against the time pattern */ - #parsePeriod(per) { - const groups = {}; - const tm = this.#getPattern('tm'); // get the RegExp for the time-pattern - if (isDefined(tm)) { - const match = this.#parseMatch(tm, per); - if (!isEmpty(match)) { - this.#result({ type: 'Period', value: per, match: 'tm', groups: cleanify(match) }); - Object.assign(groups, match); - } - } - return groups; - } - /** lookup the RegExp for a given pattern name */ - #getPattern(pat) { - const reg = this.#local.parse.pattern.get(Tempo.getSymbol(pat)); - if (isUndefined(reg)) - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Cannot find pattern: "${pat}"`); - return reg; - } - /** return a new object, with only numeric values */ - #num = (groups) => { - return ownEntries(groups) - .reduce((acc, [key, val]) => { - if (isNumeric(val)) - acc[key] = asNumber(val); - return acc; - }, {}); - }; - /** mutate the date-time by adding a duration */ - #add = (args, options = {}) => { - var _b; - const tz = options.timeZone ?? this.tz; - let zdt = this.#zdt.withTimeZone(tz); - const overrides = { - timeZone: tz, - calendar: this.#zdt.calendarId - }; - __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, "f", _Tempo_pending) ?? [...this.#local.parse.result], "f", _Tempo_pending); // collected parse-results so-far - if (isDefined(args)) { - if (isObject(args) && args.constructor === Object) { - const mutate = 'add'; - zdt = Object.entries(args ?? {}) // loop through each mutation - .reduce((zdt, [unit, offset]) => { - if (unit === 'timeZone' || unit === 'calendar') - return zdt; - const single = singular(unit); - const plural = single + 's'; - switch (`${mutate}.${single}`) { - case 'add.year': - case 'add.month': - case 'add.week': - case 'add.day': - case 'add.hour': - case 'add.minute': - case 'add.second': - case 'add.millisecond': - case 'add.microsecond': - case 'add.nanosecond': - return zdt - .add({ [plural]: offset }); - default: - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`); - return zdt; - } - }, zdt); - } - else { - return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt }); - } - } - return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt }); - }; - /** mutate the date-time by setting specific offsets */ - #set = (args, options = {}) => { - var _b; - const tz = options.timeZone ?? this.tz; - let zdt = this.#zdt.withTimeZone(tz); - const overrides = { - timeZone: tz, - calendar: this.#zdt.calendarId - }; - __classPrivateFieldSet(_b = Tempo, _classThis, __classPrivateFieldGet(_b, _classThis, "f", _Tempo_pending) ?? [...this.#local.parse.result], "f", _Tempo_pending); // collected parse-results so-far - if (isDefined(args)) { - if (isObject(args) && args.constructor === Object) { - if (args.timeZone) - overrides.timeZone = args.timeZone; - if (args.calendar) - overrides.calendar = args.calendar; - zdt = Object.entries(args ?? {}) // loop through each mutation - .reduce((zdt, [key, adjust]) => { - if (key === 'timeZone' || key === 'calendar') - return zdt; - const { mutate, offset, single } = ((key) => { - switch (key) { - case 'start': - case 'mid': - case 'end': - return { mutate: key, offset: 0, single: singular(adjust?.toString() ?? '') }; - default: - return { mutate: 'set', offset: adjust, single: singular(key) }; - } - })(key); // IIFE to analyze arguments - switch (`${mutate}.${single}`) { - case 'set.timeZone': - return zdt.withTimeZone(offset); - case 'set.calendar': - return zdt.withCalendar(offset); - case 'set.period': - case 'set.time': - case 'set.date': - case 'set.event': - case 'set.dow': // set day-of-week by number - case 'set.wkd': // set day-of-week by name - return this.#parse(offset, zdt); - case 'set.year': - case 'set.month': - // case 'set.week': // not defined - case 'set.day': - case 'set.hour': - case 'set.minute': - case 'set.second': - case 'set.millisecond': - case 'set.microsecond': - case 'set.nanosecond': - return zdt - .with({ [single]: offset }); - case 'set.yy': - case 'set.mm': - // case 'set.ww': // not defined - case 'set.dd': - case 'set.hh': - case 'set.mi': - case 'set.ss': - case 'set.ms': - case 'set.us': - case 'set.ns': - const value = Tempo.ELEMENT[single]; - return zdt - .with({ [value]: offset }); - case 'start.year': - return zdt - .with({ month: Tempo.MONTH.Jan, day: 1 }) - .startOfDay(); - case 'start.term': // TODO - return zdt; - case 'start.month': - return zdt - .with({ day: 1 }) - .startOfDay(); - case 'start.week': - return zdt - .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) }) - .startOfDay(); - case 'start.day': - return zdt - .startOfDay(); - case 'start.hour': - case 'start.minute': - case 'start.second': - return zdt - .round({ smallestUnit: offset, roundingMode: 'trunc' }); - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - case 'mid.year': - return zdt - .with({ month: Tempo.MONTH.Jul, day: 1 }) - .startOfDay(); - case 'mid.term': // TODO: relevant? - return zdt; - case 'mid.month': - return zdt - .with({ day: Math.trunc(zdt.daysInMonth / 2) }) - .startOfDay(); - case 'mid.week': - return zdt - .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) }) - .startOfDay(); - case 'mid.day': - return zdt - .round({ smallestUnit: 'day', roundingMode: 'trunc' }) - .add({ hours: 12 }); - case 'mid.hour': - return zdt - .round({ smallestUnit: 'hour', roundingMode: 'trunc' }) - .add({ minutes: 30 }); - case 'mid.minute': - return zdt - .round({ smallestUnit: 'minute', roundingMode: 'trunc' }) - .add({ seconds: 30 }); - case 'mid.second': - return zdt - .round({ smallestUnit: 'second', roundingMode: 'trunc' }) - .add({ milliseconds: 500 }); - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - case 'end.year': - return zdt - .add({ years: 1 }) - .with({ month: Tempo.MONTH.Jan, day: 1 }) - .startOfDay() - .subtract({ nanoseconds: 1 }); - case 'end.term': // TODO - return zdt - .subtract({ nanoseconds: 1 }); - case 'end.month': - return zdt - .add({ months: 1 }) - .with({ day: 1 }) - .startOfDay() - .subtract({ nanoseconds: 1 }); - case 'end.week': - return zdt - .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 }) - .startOfDay() - .subtract({ nanoseconds: 1 }); - case 'end.day': - case 'end.hour': - case 'end.minute': - case 'end.second': - return zdt - .round({ smallestUnit: offset, roundingMode: 'ceil' }) - .subtract({ nanoseconds: 1 }); - default: - __classPrivateFieldGet(Tempo, _classThis, "f", _Tempo_dbg).catch(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`); - return zdt; - } - }, zdt); // start reduce with the shifted zonedDateTime - } - else { - return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, anchor: zdt }); - } - } - return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, anchor: zdt }); - }; - #format = (fmt) => { - if (isNull(this.#tempo)) - return void 0; // don't format dates - const obj = this.#local.config.formats; - let template = (isString(fmt) && obj.has(fmt)) - ? obj[fmt] - : String(fmt); - // auto-meridiem: if {HH} is present and {mer} is absent, append it after the last time component - if (template.includes('{HH}') && !template.includes('{mer}') && !template.includes('{MER}')) { - const index = Math.max(template.lastIndexOf('{HH}'), template.lastIndexOf('{mi}'), template.lastIndexOf('{ss}')); - if (index !== -1) { - const end = template.indexOf('}', index) + 1; - template = template.slice(0, end) + '{mer}' + template.slice(end); - } - } - const result = template.replace(Match.braces, (_match, token) => { - switch (token) { - case 'wy': return pad(this.wy, 4); - case 'yyww': return pad(this.wy, 4) + pad(this.ww); - case 'yyyy': return pad(this.yy, 4); - case 'yy': return pad(this.yy % 100); - case 'mon': return this.mon; - case 'mmm': return this.mmm; - case 'mm': return pad(this.mm); - case 'dd': return pad(this.dd); - case 'day': return this.day.toString(); - case 'dow': return this.dow.toString(); - case 'wkd': return this.wkd; - case 'www': return this.www; - case 'ww': return pad(this.ww); - case 'hh': return pad(this.hh); - case 'HH': return pad(this.hh > 12 ? this.hh % 12 : this.hh || 12); - case 'mer': return this.hh >= 12 ? 'pm' : 'am'; - case 'MER': return this.hh >= 12 ? 'PM' : 'AM'; - case 'mi': return pad(this.mi); - case 'ss': return pad(this.ss); - case 'ms': return pad(this.ms, 3); - case 'us': return pad(this.us, 3); - case 'ns': return pad(this.ns, 3); - case 'ff': return `${pad(this.ms, 3)}${pad(this.us, 3)}${pad(this.ns, 3)}`; - case 'hhmiss': return `${pad(this.hh)}${pad(this.mi)}${pad(this.ss)}`; - case 'ts': return this.ts.toString(); - case 'nano': return this.nano.toString(); - case 'tz': return this.tz; - default: { - return token.startsWith('term.') - ? stringify(this.term[token.slice(5)]) - : `{${token}}`; // unknown format-code, return as-is - } - } - }); - const isExplicitlyNumeric = ['{yyyy}{ww}', '{yyyy}{mm}', '{yyyy}{mm}{dd}', '{yyww}', '{wy}{ww}', '{wy}'].includes(template); - return (isExplicitlyNumeric ? ifNumeric(result) : result); - }; - #until(arg, until = {}, since = false) { - let value, opts = {}, unit; - switch (true) { - case isString(arg) && Tempo.ELEMENT.includes(singular(arg)): - unit = arg; // e.g. tempo.until('hours') - ({ value, ...opts } = until); - break; - case isString(arg): // assume 'arg' is a dateTime string - value = arg; // e.g. tempo.until('20-May-1957', {unit: 'years'}) - if (isObject(until)) - ({ unit, ...opts } = until); - else - unit = until; // assume the 'until' arg is a 'unit' string - break; - case isObject(arg) && isString(until): // assume 'until' is a Unit - unit = until; // e.g. tempo.until({value:'20-May-1957}, 'years'}) - ({ value, ...opts } = arg); - break; - case isObject(arg) && isObject(until): // assume combination of Tempo.Options and Tempo.Until - ({ value, unit, ...opts } = Object.assign({}, arg, until)); - break; - case isString(until): - unit = until; - value = arg; - break; - case isObject(until): - unit = until.unit; - value = arg; - break; - default: - value = arg; // assume 'arg' is a DateTime - } - const offset = new this.#Tempo(value, opts); // create the offset Tempo - const diffZone = this.#zdt.timeZoneId !== offset.#zdt.timeZoneId; - // Temporal restricts cross-timezone math to absolute units ('hours') to avoid DST ambiguity - const duration = this.#zdt.until(offset.#zdt.withCalendar(this.#zdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') }); - if (isDefined(unit)) - unit = `${singular(unit)}s`; // coerce to plural - return (isUndefined(unit) || since) // if no 'unit' provided, or if called via #since() - ? getAccessors(duration) // return an Object with all the duration accessors - .reduce((acc, dur) => Object.assign(acc, { [dur]: duration[dur] }), ifDefined({ iso: duration.toString(), unit })) - : duration.total({ relativeTo: this.#zdt, unit }); // sum-up the duration components - } - /** format the elapsed time between two Tempos (to nanosecond) */ - #since(arg, until = {}) { - const dur = this.#until(arg, until, true); // get a Tempo.Duration object - const date = [dur.years, dur.months, dur.days]; - const time = [dur.hours, dur.minutes, dur.seconds]; - const fraction = [dur.milliseconds, dur.microseconds, dur.nanoseconds] - .map(Math.abs) - .map(nbr => nbr.toString().padStart(3, '0')) - .join(''); - const rtf = new Intl.RelativeTimeFormat(this.#local.config['locale'], { style: 'narrow' }); - switch (dur.unit) { - case 'years': - return rtf.format(date[0], 'years'); - case 'months': - return rtf.format(date[1], 'months'); - case 'weeks': - return rtf.format(date[1], 'weeks'); - case 'days': - return rtf.format(date[2], 'days'); - case 'hours': - return rtf.format(time[0], 'hours'); - case 'minutes': - return rtf.format(time[1], 'minutes'); - case 'seconds': - return rtf.format(time[2], 'seconds'); - case 'milliseconds': - case 'microseconds': - case 'nanoseconds': - return `${fraction}`; - default: - return dur.iso; - } - } - static { - __runInitializers(_classThis, _classExtraInitializers); - } - }; - return Tempo = _classThis; -})(); -export { Tempo }; -// #endregion Namespace -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Tempo.init(); // initialize default global configuration -// shortcut functions to common Tempo properties / methods -/** check valid Tempo */ export const isTempo = (tempo) => isType(tempo, 'Tempo'); -/** current timestamp (ts) */ export const getStamp = ((tempo, options) => new Tempo(tempo, options).ts); -/** create new Tempo */ export const getTempo = ((tempo, options) => new Tempo(tempo, options)); -/** format a Tempo */ export const fmtTempo = ((fmt, tempo, options) => new Tempo(tempo, options).format(fmt)); -//# sourceMappingURL=tempo.class.js.map \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js.map b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js.map deleted file mode 100644 index 02549ac1..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.class.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tempo.class.js","sourceRoot":"","sources":["tempo.class.ts"],"names":[],"mappings":";AAAA,OAAO,mCAAmC,CAAC,CAAS,yCAAyC;AAE7F,4DAA4D;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3F,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI5M,OAAO,KAAK,KAAK,MAAM,kCAAkC,CAAC;AAC1D,OAAO,aAAa,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAEtH,OAAO,mCAAmC,CAAC,CAAS,mBAAmB;AAUvE,0BAA0B;AAE1B,iDAAiD,CAAM,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClG,+BAA+B,CAAe,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAE3E,6BAA6B;AAE7B;;;;GAIG;IAGU,KAAK;;4BAFjB,YAAY,EACZ,SAAS;;;;;;;;;YACV,6KA6xDC;;;;QA5xDD,0DAA0D;QACzD,iCAAiC,CAAa,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,CAAC,OAAO,CAAA,CAAC,CAAC;QAC3F,gCAAgC,CAAa,MAAM,KAAK,QAAQ,KAAK,OAAO,KAAK,CAAC,QAAQ,CAAA,CAAC,CAAC;QAC5F,+BAA+B,CAAc,MAAM,KAAK,KAAK,KAAK,OAAO,KAAK,CAAC,KAAK,CAAA,CAAC,CAAC;QACtF,8BAA8B,CAAc,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC,MAAM,CAAA,CAAC,CAAC;QACvF,2CAA2C,CAAQ,MAAM,KAAK,QAAQ,KAAK,OAAO,KAAK,CAAC,QAAQ,CAAA,CAAC,CAAC;QAClG,8CAA8C,CAAM,MAAM,KAAK,SAAS,KAAK,OAAO,KAAK,CAAC,SAAS,CAAA,CAAC,CAAC;QAErG,wBAAwB,CAAiB,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC,MAAM,CAAA,CAAC,CAAC;QACpF,8BAA8B,CAAc,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,CAAC,OAAO,CAAA,CAAC,CAAC;QAEzF,2CAA2C,CAAQ,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,CAAC,OAAO,CAAA,CAAC,CAAC;QAChG,mDAAmD,CAAI,MAAM,KAAK,MAAM,KAAK,OAAO,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,OAAO,CAAA,CAAC,CAAC;QAClH,wBAAwB,CAAiB,MAAM,KAAK,KAAK,KAAK,OAAO,KAAK,CAAC,KAAK,CAAA,CAAC,CAAC;;YAElF,aAAa;YAEb,0DAA0D;YACnD,sBAAO,IAAI,MAAM,CAAC,OAAO,EAAE;oBACjC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK;oBAC9B,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK;iBAC9B,CAAC,EAHS,CAGT;;;YAEF,+CAA+C,CAAa,yBAAU,EAAiB,EAApB,CAAoB;;;YACvF,yCAAyC,CAAgB,kCAAQ,CAA4B;;;YAC7F,+CAA+C,CAAa,2BAAY,CAAC,EAAJ,CAAK;;;YAC1E,8CAA8C,CAAa,wBAAS,EAAwB,EAA3B,CAA4B;;;YA0F7F,4EAA4E;YACrE,4BAAa,CAAC,KAAkB,EAAE,OAAsB,EAAE,EAAE;oBAClE,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,OAAO,EAAE,QAAQ,CAAC;wBACzE,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAc,qDAAqD;oBAE/F,4EAA4E;oBAC5E,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,QAAkB,CAAC,CAAC;oBACvH,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC;oBAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC;oBAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAY,iDAAiD;oBAE9F,QAAQ,GAAG,EAAE,CAAC;wBACb,KAAK,CAAC,CAAC;4BACN,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAa,8CAA8C;wBACvF,KAAK,CAAC;4BACL,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAa,6CAA6C;wBACtF,KAAK,CAAC,CAAC;wBACP;4BACC,OAAO,KAAK,CAAC,CAAC,CAAmB,gCAAgC;oBACnE,CAAC;gBACF,CAAC,EAnBgB,CAmBhB;;;YA6CD,2CAA2C;YACpC,yBAAU,CAAwC,GAAM,EAAE,EAAE,CAClE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAM,EADjC,CACkC;;;YAEhD,oDAAoD;YAC7C,yBAAU,CAAC,MAAe,EAAE,EAAE;oBACpC,IAAI,QAA4B,CAAC;oBAEjC,IAAI,CAAC,CAA0B,gBAAgB;wBAC9C,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnE,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAmB,uBAAuB;oBAE7D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;oBAE9B,OAAO,QAAQ;wBACd,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAY,kDAAkD;wBAC/F,MAAM,EAAE,SAAS,EAAE,QAAQ,IAAe,0BAA0B;wBACpE,OAAO,CAAC,MAAM,IAAsB,sBAAsB;wBAC1D,MAAM,CAAA,CAAwB,0BAA0B;gBAC1D,CAAC,EAda,CAcb;;QAiLD,oCAAoC;QAEpC,0DAA0D;QAE1D;;;;;;;;WAQG;QACH,MAAM,CAAC,QAAQ,CAAC,MAAuB;YACrC,UAAkB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;YACrC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED;;;;;;;;;;WAUG;QACH,MAAM,CAAC,IAAI,CAAC,UAAyB,EAAE;YACtC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAiB,oCAAoC;gBAC3E,uBAAA,KAAK,iCAAQ,CAAC,KAAK,GAAG;oBACrB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;oBACnC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;oBACjC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;oBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;oBACjC,UAAU,EAAE,uBAAA,KAAK,qCAAY,MAAjB,KAAK,EAAa,OAAO,CAAC,UAAyC,CAAC;oBAChF,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAyC,CAAiB;oBACtF,KAAK,EAAE,OAAO,CAAC,KAAK;iBACL,CAAC;gBAEjB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC;gBACvE,uBAAA,KAAK,iCAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EACtC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAK,0CAA0C;gBAC1F;oBACC,QAAQ;oBACR,QAAQ;oBACR,MAAM,EAAE,uBAAA,KAAK,iCAAQ,MAAb,KAAK,CAAU;oBACvB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAW;oBAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;oBACpC,KAAK,EAAE,QAAQ;iBACf,CACe,CAAC;gBAElB,uBAAA,KAAK,cAAa,CAAC,uBAAA,CAAC,CAAiB,yBAAyB;gBAC9D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAU,8BAA8B;oBAC3E,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAc,mCAAmC;wBAC1E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEpB,KAAK,CAAC,OAAO,CAAC,GAAI,aAAuB,CAAC,CAAC,CAAW,iCAAiC;gBAEvF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAW,CAAC;gBACjD,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,uBAAA,KAAK,iCAAQ,EAC7B,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EACzD,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAc,wCAAwC;gBAC/E,uBAAA,KAAK,uCAAc,MAAnB,KAAK,EAAe,uBAAA,KAAK,iCAAQ,EAAE,MAAM,CAAC,CAC1C,CAAA;YACF,CAAC;iBACI,CAAC;gBACL,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC/F,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,uBAAA,KAAK,iCAAQ,EAAE,uBAAA,KAAK,uCAAc,MAAnB,KAAK,EAAe,uBAAA,KAAK,iCAAQ,EAAE,SAAmB,CAAC,EAAE,OAAO,CAAC,CAAC;YACnG,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI;gBAC7D,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,CAAC;YAE/D,OAAO,KAAK,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,0DAA0D;QAC1D,MAAM,CAAC,uCAxa4D,GAAW,IAAI,OAAO,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,yCAC9C,GAAW,EAAE,GAAW,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA,CAAC,CAAC,2CAC3D,KAAkB,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,CAAA,CAAC,CAAC,yCACjD,GAAW,EAAE,IAAY,IAAO,OAAO,MAAM,CAAC,MAAM,CAAC,uBAAA,KAAK,gCAAO,MAAZ,KAAK,EAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA,CAAC,CAAC,+CAOjJ,KAAkB;YACnC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC;gBAC7G,OAAO,CAAwB,yBAAyB;YAEzD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAK,sBAAsB;YAC1E,MAAM,MAAM,GAAG,MAAM;iBACnB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,iCAAiC;iBACtF,IAAI,CAAC,GAAG,CAAC,CAAA,CAAsB,0CAA0C;YAE3E,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,uBAAA,KAAK,gCAAO,MAAZ,KAAK,EAAQ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;gBACtE,IAAI,CAAC,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACnD,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;wBAClE,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBAE7D,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE;wBACrD,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC;wBACzB,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,IAAI;wBACd,YAAY,EAAE,IAAI;qBAClB,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAED,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,uBAAA,KAAK,gCAAO,MAAZ,KAAK,EAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAW,CAAC;gBACrE,MAAM,OAAO,GAAG,2CAA2C,CAAC;gBAC5D,IAAI,CAAC,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;oBACnD,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;wBACjE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;oBAE3D,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;wBACnD,KAAK,EAAE,OAAO;wBACd,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,IAAI;wBACd,YAAY,EAAE,IAAI;qBAClB,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC,iDAOkB,KAAkB;YACpC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACrD,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;gBACjE,OAAO,CAAwB,yBAAyB;YAEzD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAK,sBAAsB;YAC1E,MAAM,MAAM,GAAG,OAAO;iBACpB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,4CAA4C;iBACjG,IAAI,CAAC,GAAG,CAAC,CAAA,CAAsB,2CAA2C;YAE5E,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,uBAAA,KAAK,gCAAO,MAAZ,KAAK,EAAQ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;gBACtE,IAAI,CAAC,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACnD,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;wBAClE,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBAE7D,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE;wBACrD,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC;wBACzB,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,IAAI;wBACd,YAAY,EAAE,IAAI;qBAClB,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC,iDAyBkB,KAAkB;YACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAE9D,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC;gBACpE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAO,iDAAiD;YAElG,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC1B,MAAM,GAAG,GAAI,GAAW,CAAC,SAAS,IAAK,GAAW,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC1E,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAkB,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACJ,CAAC,iDAMkB,KAAkB;YACpC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAK,+BAA+B;YACnF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAU,qBAAqB;YACnE,IAAI,GAAG,GAAG,KAAK,CAAC,CAAoB,mCAAmC;YAEvE,IAAI;iBACF,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;gBACvB,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAE,GAAc,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,uCAAuC;gBACvH,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAE,GAAc,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,uCAAuC;gBAEvH,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;oBAC7B,OAAO,CAAsB,kBAAkB;gBAEhD,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAE,mEAAmE;gBAC3H,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAE,sEAAsE;gBAE/H,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,CAAgB,uDAAuD;oBAC3F,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBAChE,GAAG,GAAG,IAAI,CAAC;gBACZ,CAAC;YACF,CAAC,CAAC,CAAA;YAEH,IAAI,GAAG;gBACN,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAW,CAAC,CAAG,oCAAoC;QACpG,CAAC,+CA2BiB,KAAkB,EAAE,GAAG,OAAwB;YAEhE,MAAM,aAAa,GAAkB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC;YACnE,IAAI,OAAO,CAAC,aAAa,CAAC,EAAgB,gBAAgB;gBACzD,OAAO;YAER,IAAI,aAAa,CAAC,KAAK,EAAiB,0BAA0B;gBACjE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC;YAE7F,wEAAwE;YACxE,MAAM,OAAO,GAAG,CAAC,MAAqB,EAAE,KAAU,EAAE,OAAwB,EAAE,EAAE;gBAC/E,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,MAAM,KAAK,EAAE,CAAA;gBAEb,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;oBAClB,KAAK,QAAQ;wBACZ,UAAU,CAAC,GAAG,CAAC,KAAsB,CAAC;6BACpC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAW,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;wBACzE,MAAM;oBACP,KAAK,QAAQ,CAAC;oBACd,KAAK,QAAQ;wBACZ,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/C,MAAM;oBACP,KAAK,OAAO;wBACX,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;wBACxD,MAAM;gBACR,CAAC;YACF,CAAC,CAAA;YAED,UAAU,CAAC,aAAa,CAAC;iBACvB,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;gBAC7B,IAAI,WAAW,CAAC,MAAM,CAAC;oBAAE,OAAO,CAAU,wBAAwB;gBAClE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE3B,QAAQ,MAAM,EAAE,CAAC;oBAChB,KAAK,SAAS,CAAC;oBACf,KAAK,QAAQ,CAAC;oBACd,KAAK,OAAO,CAAC;oBACb,KAAK,QAAQ;wBACZ,sFAAsF;wBACtF,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;4BACtC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;wBAE1D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBACjC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;4BAC5C,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAC5B,MAAM,KAAK,SAAS;gCACnB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;gCACjC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC7B,CAAA;wBACF,CAAC;6BAAM,CAAC;4BACP,OAAO,CAAC,GAAG,CAAC,KAAuB,CAAC;iCAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAE,IAA4B,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;wBACpG,CAAC;wBACD,MAAM;oBAEP,KAAK,YAAY;wBAChB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,uBAAA,KAAK,qCAAY,MAAjB,KAAK,EAAa,GAAG,CAAC,KAAkD,CAAC,CAAC;wBAChG,MAAM;oBAEP,KAAK,YAAY,EAAiB,wDAAwD;wBACzF,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAkD,CAAC,CAAC;wBACtF,MAAM;oBAEP,KAAK,OAAO;wBACX,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACzC,MAAM;oBAEP,KAAK,QAAQ;wBACZ,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,KAAK,EAAE,GAAG,CAAC,KAAsB,CAAC,CAAC;wBACpD,MAAM;oBAEP,KAAK,UAAU;wBACd,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;wBAC7C,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;wBACpD,MAAM;oBAEP,KAAK,SAAS;wBACb,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;4BACnE,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAiB,CAAC,CAAC,0BAA0B;wBAEnG,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;4BACtB,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAsB,CAAiB,CAAC;wBAChG,MAAM;oBAEP,KAAK,WAAW;wBACf,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAW,CAAC,CAAC,CAAC,MAAM,CAAC;wBACrF,MAAM;oBAEP,KAAK,SAAS;wBACb,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC7C,MAAM;oBAEP,KAAK,QAAQ;wBACZ,MAAM,CAAqB,8CAA8C;oBAE1E,SAA6B,0BAA0B;wBACtD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;wBAClD,MAAM;gBACR,CAAC;YACF,CAAC,CAAC,CAAA;YAEH,MAAM,UAAU,GAAG,uBAAA,KAAK,qCAAY,MAAjB,KAAK,EAAa,KAAK,CAAC,CAAC;YAC5C,IAAI,UAAU,KAAK,uBAAA,KAAK,gCAAO,MAAZ,KAAK,EAAQ,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,EAAC,6DAA6D;gBACpH,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;YAErC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,KAAK,EAAE,aAAa,CAAC,CAAC;YAE7D,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;gBAAE,uBAAA,KAAK,qCAAY,MAAjB,KAAK,EAAa,KAAK,CAAC,CAAC;YAChE,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,KAAK,CAAC,CAAC;YAC1D,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE,uBAAA,KAAK,qCAAY,MAAjB,KAAK,EAAa,KAAK,CAAC,CAAC;YAE5D,uBAAA,KAAK,sCAAa,MAAlB,KAAK,EAAc,KAAK,CAAC,CAAC,CAAe,gCAAgC;QAC1E,CAAC,iDAMkB,KAAkC;YACpD,OAAO,OAAO,CAAC,KAAK,CAAC;iBACnB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBAChC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAG,GAAW,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QACzF,CAAC,qDAGoB,KAAkB,EAAE,MAAuB,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM;YAC/F,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAClD,MAAM,SAAS,GAAI,UAAkB,CAAC,GAAG,CAAoB,CAAC;YAC9D,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,EAAE,CAAC;YAEpC,2DAA2D;YAC3D,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC;YAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;gBACnD,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;YAErC,mBAAmB;YACnB,IAAI,SAAS,CAAC,KAAK;gBAClB,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,KAAY,CAAC,CAAC,CAAC;YAEnD,qBAAqB;YACrB,IAAI,SAAS,CAAC,OAAO;gBACpB,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAiB,CAAC;YAEvF,qBAAqB;YACrB,IAAI,SAAS,CAAC,OAAO;gBACpB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzD,qBAAqB;YACrB,IAAI,IAAI,GAAG,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC;YACnC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACzC,CAAC,mDAGmB,KAAkB;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;YAEpC,wFAAwF;YACxF,IAAI,uBAAA,KAAK,kCAAS,MAAd,KAAK,EAAU,KAAK,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAC3G,OAAO;YAER,yDAAyD;YACzD,IAAI,CAAC,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;gBACzC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;YAEjC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAc,sBAAsB;YAEhE,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;gBAC/D,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC,EAkFO,MAAM,CAAC,OAAO,EAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAA,CAAC,CAAC;QAE1C;;;WAGG;QACH,MAAM,CAAC,MAAM,CAAC,MAAoB,EAAE,OAAa;YAChD,MAAM,CAAC,GAAG,MAA+B,CAAC;YAE1C,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBAClB,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;YACpB,CAAC;YAED,OAAO,IAAI,CAAC;QACb,CAAC;QAED,kEAAkE;QAClE,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,KAAK;YAChD,OAAO,UAAU,CAAgB,GAAG,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QAmBD,oDAAoD;QACpD,MAAM,CAAC,UAAU,CAAC,MAAsB,EAAE,GAAG,GAAG,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,KAAK;YACzE,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,0DAA0D;QAC1D,MAAM,CAAC,SAAS,CAAC,GAAqB;;YACrC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,OAAO,+CAAA,CAAE,iEAAe,EAAjB,IAAiB,CAAA,uBAAA,EAAE,CAAC,CAAQ,iCAAiC;gBAChF,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAW,yBAAyB;YACrE,CAAC;YAED,IAAI,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,GAAG,CAAC;YAE9B,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC,CAAM,kCAAkC;gBAClF,OAAO,KAAK,CAAC,GAAyB,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,KAAK,CAAC,GAAyB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,qEAAqE;QACrE,MAAM,CAAC,MAAM,CAAC,MAAuB,EAAE,OAAiB;YACvD,mFAAmF;YACnF,SAAS,OAAO,CAAC,GAAoB,EAAE,KAAK,GAAG,CAAC;gBAC/C,IAAI,KAAK,GAAG,EAAE;oBAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAG,cAAc;gBAEzE,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;gBAE9C,IAAI,YAAY,CAAC,MAAM,CAAC,EAAgB,kCAAkC;oBACzE,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,kCAAkC;gBACrF,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACjD,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,4CAA4C;gBAE/F,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oBACnD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAQ,iCAAiC;oBAC7E,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,KAAY,CAAC,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC,IAAW,CAAC,EAAE,MAAM,CAAC;oBAClF,MAAM,OAAO,GAAG,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAY,CAAC,EAAE,MAAM,IAAI,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAW,CAAC,EAAE,MAAM,CAAC;oBACtH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAY,CAAC,CAAC,CAAS,iCAAiC;oBAE9E,IAAI,GAAG,GAAG,OAAO,IAAI,OAAO,IAAI,MAAM,CAAC,CAAM,gCAAgC;oBAE7E,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAI,uCAAuC;wBACrF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAQ,0BAA0B;wBACpE,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBACvC,GAAG,GAAG,OAAO,EAAE,CAAC,MAAa,CAAC,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC,MAAa,CAAC,EAAE,MAAM;+BACtE,OAAO,CAAC,MAAa,CAAC,EAAE,MAAM,IAAI,OAAO,CAAC,MAAa,CAAC,EAAE,MAAM;+BAChE,MAAM,CAAC,MAAa,CAAC,CAAC;oBAC3B,CAAC;oBAED,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAU,4CAA4C;wBACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC1C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,QAAQ,GAAG,CAAC;4BACrC,GAAG,GAAG,MAAM,QAAQ,IAAI,GAAG,GAAG,CAAC;oBACjC,CAAC;oBAED,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,KAAK,CAAC,CAAM,0BAA0B;wBACvE,CAAC,CAAC,KAAK,CAAsB,4BAA4B;wBACzD,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAgB,8DAA8D;gBAC1G,CAAC,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAgB,4BAA4B;YAErE,OAAO,IAAI,MAAM,CAAC,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,CAAQ,oCAAoC;QACrF,CAAC;QAED,0DAA0D;QAC1D,MAAM,CAAC,OAAO,CAAC,MAAuC,EAAE,MAAuC;YAC9F,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAwB,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,MAAwB,CAAC,CAAC;YAE3F,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACpE,CAAC;QAED,iCAAiC;QACjC,MAAM,KAAK,MAAM;YAChB,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,uBAAA,KAAK,iCAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,qCAAqC;QACrC,MAAM,KAAK,SAAS;YACnB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9C,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAI,UAAkB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QACrF,CAAC;QAED;;;OAGE;QACF,MAAM,KAAK,OAAO;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAW,CAAC;YAEpE,OAAO;gBACN,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC3G,MAAM,EAAE,IAAI,CAAC,MAAM;aACnB,CAAC;QACH,CAAC;QAKD,MAAM,CAAC,IAAI,CAAC,KAAsC,EAAE,OAAuB,IAAI,OAAO,IAAI,IAAI,CAAC,KAAoC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAEhJ,MAAM,CAAC,GAAG,KAAK,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAIhE,gCAAgC;QAChC,MAAM,KAAK,KAAK;YACf,OAAO,MAAM,CAAC,uBAAA,KAAK,gCAAO;iBACxB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAS,2BAA2B;QAC3E,CAAC;QAED,mFAAmF;QACnF,MAAM,CAAC,OAAO,CAAC,GAAG,MAA0B;YAC3C,OAAO,CAAC,MAAM,CAAC;iBACb,IAAI,CAAC,CAAC,CAAC;iBACP,OAAO,CAAC,CAAC,CAAC,EAAE;gBACZ,IAAI,CAAC,uBAAA,KAAK,gCAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,EAAK,0BAA0B;oBAC1E,uBAAA,KAAK,gCAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAe,qCAAqC;YAC3E,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,qCAAqC;QACrC,MAAM,KAAK,UAAU;YACpB,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;iBAC/B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAM,6BAA6B;QAChF,CAAC;QAGD,qCAAqC;QACrC,MAAM,KAAK,OAAO;YACjB,OAAO,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrE,CAAC;QAED;;WAEG;QACH,MAAM,KAAK,KAAK;YACf,MAAM,KAAK,GAAG,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC;YAClC,OAAO,MAAM,CAAC;gBACb,GAAG,KAAK,EAAwB,iCAAiC;gBACjE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,EAAa,wBAAwB;gBAClE,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;gBAC3B,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;gBACzB,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;gBAC3B,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;gBACjC,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;aACjC,CAAgB,CAAC;QACnB,CAAC;QAED,oCAAoC;QACpC,MAAM,CAAC,2DA3KiB,KAAuE;YAC9F,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;gBACrB,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC5D,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC7D,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;gBACrB,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC5D,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC9D,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC9D,MAAM,CAAC,EAAE,GAAI,KAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC,EA6JO,MAAM,CAAC,QAAQ,EAAC;YACvB,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAO,0CAA0C;QAC7F,CAAC;QAED,mCAAmC;QAEnC,0DAA0D;QAE1D,kEAAkE;QAClE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAsC;YAC1D,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC7D,QAAQ,IAAI,EAAE,CAAC;gBACd,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAQ,kBAAkB;gBAChE,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAS,4BAA4B;gBACzE,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAc,2BAA2B;YACpE,CAAC;QACF,CAAC;QAED,oCAAoC;QACpC,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChB,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAI,+CAA+C;QACpG,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACvB,OAAO,OAAO,CAAC,CAAqB,4CAA4C;QACjF,CAAC;QAED,8BAA8B;QAE9B,0DAA0D;QAE1D,wBAAwB,CAAiB,MAAM,CAAkB;QACjE,0BAA0B,CAAgB,QAAQ,GAAG,EAAmB,CAAC;QACzE,qCAAqC,CAAW,IAAI,CAAmB;QACvE,wCAAwC,CAAS,IAAI,CAA0B;QAC/E,2CAA2C,CAAQ,OAAO,CAAsC;QAChG,wCAAwC,CAAS,IAAI,GAAG,EAAmB,CAAC;QAC5E,4BAA4B,CAAe,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAgB,CAAC;QACtF,kDAAkD,CAAI,MAAM,GAAG;YAC9D,6BAA6B,CAAe,MAAM,EAAE,EAAkB;YACtE,wDAAwD,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAmB,EAAiB;SAC/F,CAAC;QAajB,YAAY,KAAsC,EAAE,UAAyB,EAAE;YAC9E,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAW,wBAAwB;YACtE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA,0DAA0D;YACpH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAa,wEAAwE;YAEnH,8DAA8D;YAC9D,IAAI,CAAC;gBACJ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAwB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,wCAAwC;gBAE/G,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAQ,CAAC,EAAE,CAAC;oBAC5E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;wBAClD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAmB,CAAC,EAAE,CAAC,CAAC;gBACxE,CAAC;gBAED,uBAAA,KAAK,gCAAO,CAAqB,oEAAoE;qBACnG,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;oBACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAM,gDAAgD;oBAC7F,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAI,4CAA4C;gBAC3F,CAAC,CAAC,CAAA;gBAEH,IAAI,SAAS,CAAC,uBAAA,KAAK,kCAAS,CAAC,EAAE,CAAC,CAAW,iCAAiC;oBAC3E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,uBAAA,KAAK,kCAAS,CAAC,CAAC,CAAA,kCAAkC;oBACtF,uBAAA,KAAK,cAAY,KAAK,CAAC,sBAAA,CAAC,CAAc,0BAA0B;gBACjE,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAkB,oBAAoB;gBACxD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAkB,yCAAyC;gBAC9E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;gBAC/C,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAyB,GAAa,CAAC,OAAO,KAAM,GAAa,CAAC,KAAK,EAAE,CAAC,CAAC;gBACzG,OAAO,EAAW,CAAC,CAAkB,sBAAsB;YAC5D,CAAC;QACF,CAAC;QAED,sIAAsI;QACtI,iEAAiE;QACjE,QAAQ,CAAC,IAAW,EAAE,IAA6B,EAAE,MAA2C,EAAE,SAAkB;YACnH,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;oBACvC,YAAY,EAAE,KAAK;oBACnB,UAAU,EAAE,KAAK;oBACjB,GAAG,EAAE;wBACJ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAI,iCAAiC;wBAChF,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;4BAC7C,CAAC,IAAI,CAAC,EAAE;gCACP,KAAK;gCACL,YAAY,EAAE,KAAK;gCACnB,QAAQ,EAAE,KAAK;gCACf,UAAU,EAAE,IAAI;6BAChB;yBACD,CAAC,CAAC,CAAA;wBACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC;iBACD,CAAC,CAAA;YACH,CAAC;QACF,CAAC;QAED,yBAAyB;QAEzB,0DAA0D;QAC1D,gCAAgC,CAAa,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAA,CAAC,CAAC;QACvF,sCAAsC,CAAU,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC;QACvM,kCAAkC,CAAY,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,KAAiB,CAAA,CAAC,CAAC;QACrG,kCAAkC,CAAY,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,UAAsB,CAAA,CAAC,CAAC;QAC1G,8BAA8B,CAAc,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAA,CAAC,CAAC;QACrF,wCAAwC,CAAS,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAA,CAAC,CAAC;QAC3F,6BAA6B,CAAe,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAgB,CAAA,CAAC,CAAC;QAClG,iCAAiC,CAAa,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAkB,CAAA,CAAC,CAAC;QACtG,mCAAmC,CAAY,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAkB,CAAA,CAAC,CAAC;QACvG,yCAAyC,CAAS,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAuB,CAAA,CAAC,CAAC;QAC/G,8CAA8C,CAAM,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAuB,CAAA,CAAC,CAAC;QACjH,6CAA6C,CAAO,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,UAAsB,CAAA,CAAC,CAAC;QAChH,6CAA6C,CAAO,IAAI,EAAE,KAAK,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC;QACrI,mDAAmD,CAAI,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,CAAA,CAAC,CAAC;QACvG,gDAAgD,CAAK,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC;QACjH,qCAAqC,CAAW,IAAI,GAAG,KAAK,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAoB,CAAC,CAAA,CAAC,CAAC;QACtH,wCAAwC,CAAS,IAAI,GAAG,KAAK,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAoB,CAAC,CAAA,CAAC,CAAC;QACxH,uCAAuC,CAAU,IAAI,GAAG,KAAK,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAA0B,CAAC,CAAA,CAAC,CAAC;QAC/H,yCAAyC,CAAS,IAAI,GAAG,KAAK,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,SAA0B,CAAC,CAAA,CAAC,CAAC;QACzI,uCAAuC,CAAU,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,SAA0B,CAAA,CAAC,CAAC;QAClH,4CAA4C,CAAO,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAA,CAAC,CAAC;QAC3G,kCAAkC;QAClC,IAAI,MAAM;YACT,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,yDAAyD,CAAC,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA,CAAC,CAAC;QAClG,sDAAsD,CAAE,IAAI,IAAI,KAAK,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;QAClG,yDAAyD,CAAC,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAA,CAAC,CAAC;QACxF,wBAAwB,CAAiB,IAAI,KAAK;YACjD,OAAO,MAAM,CAAC;gBACb,0BAA0B,CAAc,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBACnG,+BAA+B,CAAY,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB;gBAClF,+BAA+B,CAAY,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzG,8BAA8B,CAAY,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,gBAAgB;aAChF,CAAC,CAAA;QACH,CAAC;QACD,uCAAuC;QACvC,qCAAqC;QAErC;;;;;WAKG;QACH,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,WAA2B,CAAC,CAAC,CAAC;QAQzD,4CAA4C,CAAO,KAAK,CAAC,UAAyD,EAAE,WAAyC,IAA6B,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA,CAAC,CAAC;QAKvO,2CAA2C,CAAQ,KAAK,CAAC,UAAyD,EAAE,WAAyC,IAAY,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA,CAAC,CAAC;QAEtN,4DAA4D,CAAC,MAAM,CAAyB,GAAM,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC;QAChI,0DAA0D,CAAA,GAAG,CAAC,KAAsC,EAAE,OAAuB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3K,mDAAmD,CAAI,GAAG,CAAC,KAAsC,EAAE,OAAuB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACxK,uDAAuD,CAAE,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA,CAAC,CAAC;QAE9G,oDAAoD,CAAG,UAAU,KAAK,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC;QACrK,kDAAkD,CAAI,WAAW,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAA,CAAC,CAAC;QAC9G,kDAAkD,CAAI,WAAW,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAA,CAAC,CAAC;QAC9G,sDAAsD,CAAE,eAAe,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,eAAe,EAAE,CAAA,CAAC,CAAC;QACxH,8CAA8C,CAAM,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,CAAA,CAAC,CAAC;QAExG,iDAAiD,CAAK,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAA,CAAC,CAAC;QACjK,0DAA0D,CAAA,QAAQ,KAAK,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAA,CAAC,CAAC;QAC1I,sDAAsD,CAAE,MAAM,KAAK,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC;QACrJ,mDAAmD,CAAI,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC;QAE1F,qCAAqC;QAErC,0DAA0D;QAE1D,0EAA0E;QAC1E,SAAS,CAAC,OAAsB;YAC/B,yDAAyD;YACzD,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAA,KAAK,iCAAQ,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAEtD,6DAA6D;YAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YAE9B,uBAAA,KAAK,oCAAW,MAAhB,KAAK,EAAY,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAS,oBAAoB;QACrE,CAAC;QAED,2BAA2B;QAC3B,MAAM,CAAC,KAAsB,EAAE,QAAiC;YAC/D,MAAM,KAAK,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;iBACnF,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YAEzE,qFAAqF;YACrF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAClD,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,QAAgB,CAAC,EAAE,IAAK,QAAgB,CAAC,UAAU,CAAC;YAChG,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,QAAgB,CAAC,EAAE,IAAK,QAAgB,CAAC,UAAU,CAAC;YAEjG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,uBAAA,KAAK,kCAAS,CAAC,EAAG,qCAAqC;gBAC3G,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9C,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,GAAG,CAAC,CAAC,CAAC,0BAA0B;YAE5G,QAAQ,IAAI,EAAE,CAAC;gBACd,KAAK,MAAM,CAAC;gBACZ,KAAK,MAAM,CAAC;gBACZ,KAAK,OAAO,CAAC;gBACb,KAAK,WAAW;oBACf,OAAO,KAAK,CAAC;gBAEd,KAAK,QAAQ,EAAqB,iDAAiD;oBAClF,IAAI,CAAC;wBACJ,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAY,qCAAqC;wBACrF,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;wBACnF,IAAI,IAAI,CAAC,MAAM;4BAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC;wBAC9D,OAAO,GAAG,CAAC;oBACZ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC,CAAsB,yCAAyC;wBAC7E,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;wBACjE,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,gDAAgD,CAAC,CAAC;wBAEtF,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC5B,IAAI,CAAC;gCACJ,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;4BAC7E,CAAC;4BAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;wBACtC,CAAC;wBAED,IAAI,CAAC;4BACJ,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;wBACjF,CAAC;wBAAC,MAAM,CAAC,CAAC,uCAAuC,CAAC,CAAC;wBAEnD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;wBACxC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;4BACxB,OAAO,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,KAAK,GAAG,CAAC,CAAC;wBAE9E,OAAO,QAAQ,CAAC,aAAa,CAAW,0BAA0B;6BAChE,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;6BACrD,YAAY,CAAC,GAAG,CAAC,CAAA;oBACpB,CAAC;gBAEF,KAAK,wBAAwB,EAAa,qDAAqD;oBAC9F,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC;wBAC3D,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAE7C,KAAK,oBAAoB,CAAC;gBAC1B,KAAK,wBAAwB;oBAC5B,OAAO,KAAK;yBACV,eAAe,CAAC,EAAE,CAAC;yBACnB,YAAY,CAAC,GAAG,CAAC,CAAC;gBAErB,KAAK,oBAAoB;oBACxB,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAEnC,KAAK,yBAAyB,EAAa,wCAAwC;oBAClF,OAAO,KAAK;yBACV,WAAW,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;yBAC5D,eAAe,CAAC,EAAE,CAAC;yBACnB,YAAY,CAAC,GAAG,CAAC,CAAA;gBAEpB,KAAK,wBAAwB,EAAa,sBAAsB;oBAC/D,OAAO,KAAK;yBACV,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;yBACjC,eAAe,CAAC,EAAE,CAAC;yBACnB,YAAY,CAAC,GAAG,CAAC,CAAA;gBAEpB,KAAK,kBAAkB;oBACtB,OAAO,KAAK;yBACV,kBAAkB,CAAC,EAAE,CAAC;yBACtB,YAAY,CAAC,GAAG,CAAC,CAAA;gBAEpB,KAAK,OAAO;oBACX,OAAO,KAAK;yBACV,UAAU,EAAE;yBACZ,YAAY,CAAC,EAAE,CAAC;yBAChB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAgB,0CAA0C;gBAE/E,KAAK,MAAM;oBACV,OAAO,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;yBAC5D,kBAAkB,CAAC,EAAE,CAAC;yBACtB,YAAY,CAAC,GAAG,CAAC,CAAC;gBAErB,KAAK,QAAQ,EAAqB,iDAAiD;oBAClF,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC1F,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAEtE,OAAO,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;yBAClF,kBAAkB,CAAC,EAAE,CAAC;yBACtB,YAAY,CAAC,GAAG,CAAC,CAAC;gBAErB,KAAK,QAAQ,EAAqB,kDAAkD;oBACnF,OAAO,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC;yBACjD,kBAAkB,CAAC,EAAE,CAAC;yBACtB,YAAY,CAAC,GAAG,CAAC,CAAC;gBAErB;oBACC,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,oCAAoC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACnG,OAAO,KAAK,CAAC;YACf,CAAC;QACF,CAAC;QAED,6CAA6C;QAC7C,KAAK,CAAC,KAAsC,EAAE,UAAyB,EAAE;YACxE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC5B,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC;gBAC7B,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC5B,CAAC;QAED,uDAAuD;QACvD,UAAU,CAAC,GAAQ;YAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM;gBAAE,OAAO,KAAK,CAAC;YAE/D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAe,6EAA6E;YACtH,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5C,OAAO,KAAK,CAAC;YAEd,OAAO,IAAI;iBACT,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,2DAA2D;QAC3D,oBAAoB,CAAC,KAAiD;YACrE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC;gBACrC,OAAO,KAAK,CAAC;YAEd,8DAA8D;YAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,OAAO,CAAC;gBAC7D,OAAO,KAAK,CAAC;YAEd,kDAAkD;YAClD,OAAO,IAAI;iBACT,MAAM,CAAC,QAAQ,CAAC;iBAChB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/C,CAAC;QAED,OAAO,CAAC,GAAG,IAA4B;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAgB,CAAC,CAAA,+BAA+B;YAEvF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;oBAC/C,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;gBACzB,CAAC,uBAAA,KAAK,kCAAS,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC;QAED,8DAA8D;QAC9D,QAAQ,CAAC,KAAiC,EAAE,QAAgC,EAAE,UAAU,GAAG,KAAK;YAC/F,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;YAE5B,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAS,kEAAkE;gBACjH,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,KAAY,CAAC;gBAC/D,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;oBAC1B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;oBAC/B,CAAC,CAAC,QAAQ,CAAC;gBAEZ,IAAI,QAAQ;oBACX,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAU,0BAA0B;gBACtE,IAAI,QAAQ;oBACX,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAU,0BAA0B;gBAEtE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;gBAEtG,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;oBACzB,IAAI,EAAE,wBAAwB,EAAY,sBAAsB;oBAChE,KAAK,EAAE,GAAG;iBACV,CAAC,CAAA;YACH,CAAC;YAED,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnC,OAAO,GAAG,CAAC;YACZ,CAAC;YAED,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAI,KAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAE5B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAgB,8BAA8B;gBACrE,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAiB,6BAA6B;oBACjE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;oBACtC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC9C,CAAC;gBACD,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAc,6CAA6C;oBACpF,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACvC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvE,CAAC;YACF,CAAC;iBACI,CAAC,CAAyB,sBAAsB;gBACpD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAoB,mFAAmF;oBAC7H,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,4EAA4E,CAAC,CAAC;oBACnH,OAAO,GAAG,CAAC;gBACZ,CAAC;YACF,CAAC;YAED,6GAA6G;YAE7G,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;YACtC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAM,iCAAiC;gBAClF,IAAI,OAAO,CAAC,MAAM,CAAC;oBAAE,SAAS,CAAY,mCAAmC;gBAE7E,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,kDAAkD;gBAE3H,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAK,8CAA8C;gBAChG,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAI,uDAAuD;gBAE1G,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAG,mDAAmD;gBACtG,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAK,yDAAyD;gBAC3G,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAK,yDAAyD;gBAE3G;;;mBAGG;gBACH,sEAAsE;gBACtE,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC7F,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBAE/C,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAExE,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,uCAAuC;gBAC9F,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,oCAAoC;gBAErG,MAAM,CAAwB,yBAAyB;YACxD,CAAC;YAED,OAAO,GAAG,CAAC;QACZ,CAAC;QAED,gEAAgE;QAChE,WAAW,CAAC,GAAW,EAAE,KAAuC;YAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;YAEzD,UAAU,CAAC,MAAM,CAAC,CAAmB,+CAA+C;iBAClF,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAE9D,OAAO,MAAM,CAAC;QACf,CAAC;QAED,8EAA8E;QAC9E,YAAY,CAAC,MAAoB,EAAE,QAAgC;YAClE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAgB,8EAA8E;YAEtH,IAAI,CAAC;gBACJ,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,CAAa,EAAE,CAAC;oBAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACxC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;wBAAE,SAAS;oBAEpC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAA,KAAK,iCAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACtK,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBACzC,IAAI,CAAC,KAAK;wBAAE,SAAS;oBAErB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAY,CAAC,CAAC,CAAC,UAAU,CAAC;oBAC7F,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;oBAE3E,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBAEjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;YACF,CAAC;oBAAS,CAAC;gBACV,IAAI,CAAC,OAAO,GAAG,KAAK,CAAQ,CAAC,CAAa,eAAe;YAC1D,CAAC;YAED,sGAAsG;YACtG,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACzD,MAAM,EAAE,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,MAAM,CAAC,IAAI,CAAgB,CAAC,CAAC,CAAC,qBAAqB;gBAC5E,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAe,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACzG,CAAC;YAED,mCAAmC;YACnC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvE,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC9C,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;gBACxH,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAE9C,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED;;;;;;;;WAQG;QACH,cAAc,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAA0B;YACrE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,QAAQ,GAAG,EAAE,CAAC;gBACb,KAAK,KAAK,CAAC,CAAC,CAAqB,gBAAgB;gBACjD,KAAK,GAAG,CAAC;gBACT,KAAK,MAAM,EAAsB,iBAAiB;oBACjD,OAAO,CAAC,CAAA;gBACT,KAAK,GAAG,CAAC,CAAuB,cAAc;gBAC9C,KAAK,MAAM;oBACV,OAAO,MAAM,CAAC;gBACf,KAAK,GAAG,CAAC,CAAuB,kBAAkB;gBAClD,KAAK,MAAM,CAAC;gBACZ,KAAK,MAAM;oBACV,OAAO,CAAC,MAAM,CAAC;gBAChB,KAAK,GAAG,CAAC,CAAuB,0BAA0B;gBAC1D,KAAK,KAAK;oBACT,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;wBACxB,CAAC,CAAC,CAAC,MAAM;wBACT,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBACjB,KAAK,IAAI,EAAuB,uCAAuC;oBACtE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;wBACvB,CAAC,CAAC,CAAC,MAAM;wBACT,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBACjB,KAAK,GAAG,CAAC,CAAuB,yBAAyB;gBACzD,KAAK,OAAO;oBACX,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;wBACvB,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBAChB,KAAK,IAAI,CAAC,CAAsB,sCAAsC;gBACtE,KAAK,IAAI;oBACR,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;wBACxB,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBAChB,SAA+B,sBAAsB;oBACpD,OAAO,CAAC,CAAC;YACX,CAAC;QACF,CAAC;QAED;;;;;;;;;;;;;WAaG;QACH,aAAa,CAAC,MAAoB,EAAE,QAAgC;YACnE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,MAA2B,CAAC;YAC1E,IAAI,WAAW,CAAC,GAAG,CAAC,EAAmB,6CAA6C;gBACnF,OAAO,QAAQ,CAAC;YAEjB;;;;cAIE;YACF,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAU,CAAC;YACxE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;iBAChB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAW,gCAAgC;gBAC5E,OAAO,QAAQ,CAAC,CAAmB,sDAAsD;YAE1F,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,mCAAmC,GAAG,iBAAiB,GAAG,GAAG,CAAC,CAAC;gBACnG,OAAO,QAAQ,CAAC,CAAmB,8CAA8C;YAClF,CAAC;YAED,MAAM,OAAO,GAAG,uBAAA,KAAK,iCAAQ,MAAb,KAAK,EAAS,GAAG,CAAC,CAAC,CAAW,uBAAuB;YACrE,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAkB,2BAA2B;YACjE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAW,gCAAgC;iBAC5E,SAAS,CAAC,CAAC,EAAiB,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;YAEnD,MAAM,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAQ,yCAAyC;kBACtF,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YAChH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YAErB,OAAO,QAAQ;iBACb,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAoB,gBAAgB;QACrD,CAAC;QAED;;;WAGG;QACH,UAAU,CAAC,MAAoB,EAAE,QAAgC;YAChE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,MAA4B,CAAC;YAC9E,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC;gBAChE,OAAO,QAAQ,CAAC,CAAmB,iBAAiB;YAErD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,uBAAA,KAAK,8BAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,mCAAmC,GAAG,iBAAiB,GAAG,GAAG,CAAC,CAAC;gBACnG,OAAO,QAAQ,CAAC;YACjB,CAAC;YAED,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;gBACpC,IAAI,EAAE,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAe,mCAAmC;gBAC3E,KAAK,EAAE,EAAE,IAAI,QAAQ,CAAC,KAAK,EAAc,qCAAqC;gBAC9E,GAAG,EAAE,EAAE,IAAI,QAAQ,CAAC,GAAG,EAAgB,iCAAiC;aAC/D,CAAC,CAAC;YAEZ,mDAAmD;YACnD,IAAI,GAAG,EAAE,CAAC;gBACT,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC;gBACpB,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBACnC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC,CAAC;gBAE1D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBAErB,OAAO,QAAQ,CAAC;YACjB,CAAC;YAED,oFAAoF;YACpF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAM,kCAAkC;gBACnF,MAAM,KAAK,GAAG,QAAQ;qBACpB,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAE,oCAAoC;qBACrF,IAAI,GAAG,GAAG,CAAA,CAAqB,aAAa;gBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAG,kBAAkB;gBACrE,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAG,wBAAwB;YAC5E,CAAC;YAED,6CAA6C;YAC7C,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAkB,2BAA2B;YACjE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAG,sBAAsB;YAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAEzE,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YAExD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YAErB,gFAAgF;YAChF,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;iBAC7E,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS,6BAA6B;iBAC1E,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAQ,mBAAmB;QACpE,CAAC;QAED,wEAAwE;QACxE,UAAU,CAAC,SAAuB,EAAE,EAAE,QAAgC;YACrE,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAc,yCAAyC;gBACnF,OAAO,QAAQ,CAAC;YAEjB,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3E,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACd,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA,CAAA,yDAAyD;gBAC/G,EAAE,IAAI,EAAE,CAAC,CAAuB,sCAAsC;YACvE,CAAC;YAED,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAa,sDAAsD;gBAChG,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACvD,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,CAAC;YAED,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;gBACxF,EAAE,IAAI,EAAE,CAAC,CAAuB,4CAA4C;YAC7E,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE;gBACpD,EAAE,IAAI,EAAE,CAAC,CAAuB,wBAAwB;YAEzD,OAAO,QAAQ,CAAqB,kCAAkC;iBACpE,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACzG,CAAC;QAED;;;WAGG;QACH,UAAU,CAAC,MAAoB,EAAE,QAAgC;YAChE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,4BAA4B;YAClF,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,4BAA4B;YAClF,MAAM,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC;YAExB,IAAI,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvE,IAAI,IAAI,CAAC,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,gCAAgC;gBACrF,QAAQ,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAmC;YACjG,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,GAAG,IAAI,GAAG,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAClE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACvC,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YAErB,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED,qDAAqD;QACrD,WAAW,CAAC,GAAW;YACtB,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAQ,iDAAiD;gBACjG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAW,gCAAgC;gBAC3E,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAA,CAAW,8BAA8B;YAE1E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAElC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAEzC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACrB,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBACjF,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBAC9B,CAAC;gBACF,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAAE,MAAM,CAAa,sCAAsC;YAChF,CAAC;YAED,OAAO,MAAM,CAAC,CAAqB,oCAAoC;QACxE,CAAC;QAED,uDAAuD;QACvD,YAAY,CAAC,GAAW;YACvB,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAa,sCAAsC;YAErF,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBACxC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrB,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACnF,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC9B,CAAC;YACF,CAAC;YAED,OAAO,MAAM,CAAC;QACf,CAAC;QAED,iDAAiD;QACjD,WAAW,CAAC,GAAW;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAEhE,IAAI,WAAW,CAAC,GAAG,CAAC;gBACnB,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,GAAG,CAAC,CAAC;YAEvE,OAAO,GAAG,CAAC;QACZ,CAAC;QAED,oDAAoD;QACpD,IAAI,GAAG,CAAC,MAAuC,EAAE,EAAE;YAClD,OAAO,UAAU,CAAC,MAAM,CAAC;iBACvB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;gBAC3B,IAAI,SAAS,CAAC,GAAG,CAAC;oBACjB,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC1B,OAAO,GAAG,CAAC;YACZ,CAAC,EAAE,EAA4B,CAAC,CAAC;QACnC,CAAC,CAAA;QACD,gDAAgD;QAChD,IAAI,GAAG,CAAC,IAAU,EAAE,UAAyB,EAAE,EAAE,EAAE;;YAClD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC;YACvC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG;gBACjB,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;aACb,CAAC;YAEnB,8GAAmB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAA,CAAC,CAAG,iCAAiC;YAErF,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;oBACnD,MAAM,MAAM,GAAG,KAAK,CAAC;oBACrB,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAU,6BAA6B;yBACrE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE;wBAC/B,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU;4BAAE,OAAO,GAAG,CAAC;wBAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAc,CAAC,CAAC;wBACxC,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;wBAE5B,QAAQ,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,CAAC;4BAC/B,KAAK,UAAU,CAAC;4BAChB,KAAK,WAAW,CAAC;4BACjB,KAAK,UAAU,CAAC;4BAChB,KAAK,SAAS,CAAC;4BACf,KAAK,UAAU,CAAC;4BAChB,KAAK,YAAY,CAAC;4BAClB,KAAK,YAAY,CAAC;4BAClB,KAAK,iBAAiB,CAAC;4BACvB,KAAK,iBAAiB,CAAC;4BACvB,KAAK,gBAAgB;gCACpB,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;4BAE7B;gCACC,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,MAAM,WAAW,IAAI,gBAAgB,MAAM,GAAG,CAAC,CAAC;gCAC1G,OAAO,GAAG,CAAC;wBACb,CAAC;oBACF,CAAC,EAAE,GAAG,CAAC,CAAA;gBACT,CAAC;qBACI,CAAC;oBACL,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC3F,CAAC;YACF,CAAC;YAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1F,CAAC,CAAA;QACD,uDAAuD;QACvD,IAAI,GAAG,CAAC,IAAU,EAAE,UAAyB,EAAE,EAAE,EAAE;;YAClD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC;YACvC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG;gBACjB,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;aACb,CAAC;YAEnB,8GAAmB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAA,CAAC,CAAG,iCAAiC;YAErF,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;oBAEnD,IAAK,IAAY,CAAC,QAAQ;wBAAE,SAAS,CAAC,QAAQ,GAAI,IAAY,CAAC,QAAQ,CAAC;oBACxE,IAAK,IAAY,CAAC,QAAQ;wBAAE,SAAS,CAAC,QAAQ,GAAI,IAAY,CAAC,QAAQ,CAAC;oBAExE,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAU,6BAA6B;yBACrE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;wBAC9B,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,UAAU;4BAAE,OAAO,GAAG,CAAC;wBAEzD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;4BAC3C,QAAQ,GAAG,EAAE,CAAC;gCACb,KAAK,OAAO,CAAC;gCACb,KAAK,KAAK,CAAC;gCACX,KAAK,KAAK;oCACT,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;gCAE9E;oCACC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAa,CAAC,EAAE,CAAA;4BAC3E,CAAC;wBACF,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAuB,4BAA4B;wBAE3D,QAAQ,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,CAAC;4BAC/B,KAAK,cAAc;gCAClB,OAAO,GAAG,CAAC,YAAY,CAAC,MAAa,CAAC,CAAC;4BACxC,KAAK,cAAc;gCAClB,OAAO,GAAG,CAAC,YAAY,CAAC,MAAa,CAAC,CAAC;4BAExC,KAAK,YAAY,CAAC;4BAClB,KAAK,UAAU,CAAC;4BAChB,KAAK,UAAU,CAAC;4BAChB,KAAK,WAAW,CAAC;4BACjB,KAAK,SAAS,CAAC,CAAkB,4BAA4B;4BAC7D,KAAK,SAAS,EAAmB,0BAA0B;gCAC1D,OAAO,IAAI,CAAC,MAAM,CAAC,MAAa,EAAE,GAAG,CAAC,CAAC;4BAExC,KAAK,UAAU,CAAC;4BAChB,KAAK,WAAW,CAAC;4BACjB,qDAAqD;4BACrD,KAAK,SAAS,CAAC;4BACf,KAAK,UAAU,CAAC;4BAChB,KAAK,YAAY,CAAC;4BAClB,KAAK,YAAY,CAAC;4BAClB,KAAK,iBAAiB,CAAC;4BACvB,KAAK,iBAAiB,CAAC;4BACvB,KAAK,gBAAgB;gCACpB,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;4BAE9B,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,oDAAoD;4BACpD,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ;gCACZ,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAuB,CAAC,CAAC;gCACrD,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;4BAE7B,KAAK,YAAY;gCAChB,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;qCACxC,UAAU,EAAE,CAAC;4BAEhB,KAAK,YAAY,EAAmB,OAAO;gCAC1C,OAAO,GAAG,CAAC;4BAEZ,KAAK,aAAa;gCACjB,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;qCAChB,UAAU,EAAE,CAAC;4BAEhB,KAAK,YAAY;gCAChB,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;qCAC9C,UAAU,EAAE,CAAC;4BAEhB,KAAK,WAAW;gCACf,OAAO,GAAG;qCACR,UAAU,EAAE,CAAC;4BAEhB,KAAK,YAAY,CAAC;4BAClB,KAAK,cAAc,CAAC;4BACpB,KAAK,cAAc;gCAClB,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,MAAsC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;4BAE1F,kDAAkD;4BAClD,KAAK,UAAU;gCACd,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;qCACxC,UAAU,EAAE,CAAC;4BAEhB,KAAK,UAAU,EAAoB,kBAAkB;gCACpD,OAAO,GAAG,CAAC;4BAEZ,KAAK,WAAW;gCACf,OAAO,GAAG;qCACR,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC;qCAC9C,UAAU,EAAE,CAAC;4BAEhB,KAAK,UAAU;gCACd,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;qCAC9C,UAAU,EAAE,CAAC;4BAEhB,KAAK,SAAS;gCACb,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;qCACrD,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;4BAEtB,KAAK,UAAU;gCACd,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;qCACtD,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;4BAExB,KAAK,YAAY;gCAChB,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;qCACxD,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;4BAExB,KAAK,YAAY;gCAChB,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;qCACxD,GAAG,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;4BAE9B,kDAAkD;4BAClD,KAAK,UAAU;gCACd,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;qCACjB,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;qCACxC,UAAU,EAAE;qCACZ,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;4BAEhC,KAAK,UAAU,EAAoB,OAAO;gCACzC,OAAO,GAAG;qCACR,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;4BAEhC,KAAK,WAAW;gCACf,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;qCAClB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;qCAChB,UAAU,EAAE;qCACZ,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;4BAEhC,KAAK,UAAU;gCACd,OAAO,GAAG;qCACR,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;qCACjD,UAAU,EAAE;qCACZ,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;4BAEhC,KAAK,SAAS,CAAC;4BACf,KAAK,UAAU,CAAC;4BAChB,KAAK,YAAY,CAAC;4BAClB,KAAK,YAAY;gCAChB,OAAO,GAAG;qCACR,KAAK,CAAC,EAAE,YAAY,EAAE,MAA8C,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;qCAC7F,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;4BAEhC;gCACC,uBAAA,KAAK,8BAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,MAAM,WAAW,MAAM,gBAAgB,MAAM,GAAG,CAAC,CAAC;gCAC5G,OAAO,GAAG,CAAC;wBACb,CAAC;oBACF,CAAC,EAAE,GAAG,CAAC,CAAA,CAA2B,8CAA8C;gBAClF,CAAC;qBACI,CAAC;oBACL,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC3F,CAAC;YACF,CAAC;YAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1F,CAAC,CAAA;QAED,OAAO,GAAG,CAAmB,GAAM,EAAuB,EAAE;YAC3D,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACtB,OAAO,KAAK,CAAmC,CAAC,CAAG,4BAA4B;YAEhF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YACvC,IAAI,QAAQ,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC7C,CAAC,CAAE,GAAW,CAAC,GAAG,CAAW;gBAC7B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEf,iGAAiG;YACjG,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;gBACjH,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBAClB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC7C,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnE,CAAC;YACF,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAc,EAAE,KAAa,EAAE,EAAE;gBAC/E,QAAQ,KAAK,EAAE,CAAC;oBACf,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAClC,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnD,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBACpC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;oBACrC,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;oBAC5B,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;oBAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACvC,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACvC,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;oBAC5B,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;oBAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnE,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC/C,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC/C,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAClC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAClC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAClC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC3E,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBACtE,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;oBACrC,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACzC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;oBAC1B,OAAO,CAAC,CAAC,CAAC;wBACT,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;4BAC/B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;4BACtC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAiB,oCAAoC;oBACtE,CAAC;gBACF,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,MAAM,mBAAmB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5H,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAwB,CAAC;QAClF,CAAC,CAAA;QAUD,MAAM,CAAC,GAAkD,EAAE,QAAQ,EAAiC,EAAE,KAAK,GAAG,KAAK;YAClH,IAAI,KAAK,EAAE,IAAI,GAAkB,EAAE,EAAE,IAA4B,CAAC;YAClE,QAAQ,IAAI,EAAE,CAAC;gBACd,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC1D,IAAI,GAAG,GAAiB,CAAC,CAAc,4BAA4B;oBACnE,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAsB,CAAC,CAAC;oBAC9C,MAAM;gBACP,KAAK,QAAQ,CAAC,GAAG,CAAC,EAAmB,oCAAoC;oBACxE,KAAK,GAAG,GAAG,CAAC,CAAoB,mDAAmD;oBACnF,IAAI,QAAQ,CAAC,KAAK,CAAC;wBAClB,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,KAAyC,CAAC,CAAA;;wBAC3D,IAAI,GAAG,KAAmB,CAAC,CAAU,4CAA4C;oBACtF,MAAM;gBACP,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAS,2BAA2B;oBACxE,IAAI,GAAG,KAAK,CAAC,CAAoB,mDAAmD;oBACpF,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,GAAoB,CAAC,CAAC;oBAC5C,MAAM;gBACP,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAS,sDAAsD;oBACnG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAqC,CAAC,CAAC;oBAC/F,MAAM;gBACP,KAAK,QAAQ,CAAC,KAAK,CAAC;oBACnB,IAAI,GAAG,KAAK,CAAC;oBACb,KAAK,GAAG,GAAqB,CAAC;oBAC9B,MAAM;gBACP,KAAK,QAAQ,CAAC,KAAK,CAAC;oBACnB,IAAI,GAAI,KAA0C,CAAC,IAAI,CAAC;oBACxD,KAAK,GAAG,GAAqB,CAAC;oBAC9B,MAAM;gBACP;oBACC,KAAK,GAAG,GAAqB,CAAC,CAAW,6BAA6B;YACxE,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAM,0BAA0B;YAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YACjE,4FAA4F;YAC5F,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;YAE1I,IAAI,SAAS,CAAC,IAAI,CAAC;gBAClB,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAiB,CAAC,CAAM,mBAAmB;YAEpE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAW,mDAAmD;gBAChG,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAe,mDAAmD;qBACxF,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAG,QAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAC1E,SAAS,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAoB,CAAC,CAAC;gBAClE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAE,iCAAiC;QACvF,CAAC;QAED,iEAAiE;QACjE,MAAM,CAAC,GAAkC,EAAE,QAAQ,EAAiB;YACnE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAO,8BAA8B;YAC/E,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAU,CAAC;YACxD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAU,CAAC;YAC5D,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC;iBACpE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;iBACb,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;iBAC3C,IAAI,CAAC,EAAE,CAAC,CAAA;YAEV,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE3F,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,OAAO;oBACX,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrC,KAAK,QAAQ;oBACZ,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACtC,KAAK,OAAO;oBACX,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;gBACpC,KAAK,MAAM;oBACV,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAEpC,KAAK,OAAO;oBACX,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrC,KAAK,SAAS;oBACb,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACvC,KAAK,SAAS;oBACb,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAEvC,KAAK,cAAc,CAAC;gBACpB,KAAK,cAAc,CAAC;gBACpB,KAAK,aAAa;oBACjB,OAAO,GAAG,QAAQ,EAAE,CAAC;gBAEtB;oBACC,OAAO,GAAG,CAAC,GAAG,CAAC;YACjB,CAAC;QACF,CAAC;;YA3xDW,uDAAK;;;;;SAAL,KAAK;AA+8DlB,uBAAuB;AAEvB,yGAAyG;AACzG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAwB,0CAA0C;AAO/E,0DAA0D;AAC1D,wBAAwB,CAAG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,MAAM,CAAQ,KAAK,EAAE,OAAO,CAAC,CAAC;AACrG,6BAA6B,CAAC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,CAAkC,CAAC;AAC1I,uBAAuB,CAAI,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAwB,CAAC;AAC1H,qBAAqB,CAAK,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAQ,CAAC"} \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.d.ts deleted file mode 100644 index fff643b8..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { Tempo } from '#tempo/tempo.class.js'; -declare module '#tempo/tempo.class.js' { - namespace Tempo { - let ticker: { - (intervalMs: number | string | bigint): AsyncGenerator & AsyncDisposable; - (intervalMs: number | string | bigint, seed: Tempo.DateTime): AsyncGenerator & AsyncDisposable; - (intervalMs: number | string | bigint, callback: (t: Tempo, stop: () => void) => void): (() => void) & Disposable; - (intervalMs: number | string | bigint, seed: Tempo.DateTime, callback: (t: Tempo, stop: () => void) => void): (() => void) & Disposable; - }; - } -} -/** - * # TickerPlugin - * Implementation of Tempo.ticker as an optional plugin. - * Extends the Tempo class with pulse-based date-time generators. - */ -export declare const TickerPlugin: Tempo.Plugin; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js deleted file mode 100644 index cde47298..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js +++ /dev/null @@ -1,63 +0,0 @@ -import { asNumber } from '#library/number.library.js'; -import { isNumber, isFunction } from '#library/type.library.js'; -/** - * # TickerPlugin - * Implementation of Tempo.ticker as an optional plugin. - * Extends the Tempo class with pulse-based date-time generators. - */ -export const TickerPlugin = (_options, TempoClass, _factory) => { - /** - * ## Tempo.ticker() - * Emits a pulse of `Tempo` objects at the specified interval. - * All tickers emit their initial state immediately upon initialization (T=0). - * Supports Async Generators (Pattern 1) or callbacks (Pattern 2). - */ - TempoClass.ticker = function (intervalMs, seedOrCallback, callback) { - const interval = asNumber(intervalMs); - if (!isNumber(interval)) - throw new RangeError('Tempo.ticker: intervalMs must be a finite numeric value'); - const [seed, cb] = isFunction(seedOrCallback) - ? [void 0, seedOrCallback] - : [seedOrCallback, callback]; - let current = new TempoClass(seed); - const now = () => globalThis.Temporal.Now.instant().epochMilliseconds; - // Pattern 2 ~ Callbacks - if (isFunction(cb)) { - let id, stopped = (interval === 0); - const start = now(), absInterval = Math.abs(interval); - let ticks = 0; - const stop = Object.assign(() => { - stopped = true; - clearTimeout(id); - }, { [Symbol.dispose]: () => stop() }); - (function tick() { - cb(current.clone(), stop); // unified emission - if (!stopped) { - const delay = Math.max(0, start + (++ticks * absInterval) - now()); - id = setTimeout(() => { - current = current.add({ milliseconds: interval }); // increment (or decrement) - tick(); - }, delay); - } - })(); - return stop; - } - // Pattern 1 ~ Async Generators - const generator = (async function* () { - const start = now(), absInterval = Math.abs(interval); - let ticks = 0; - while (true) { - yield current.clone(); // emit immediately - if (interval === 0) - break; // support for 'emit-once' - const delay = Math.max(0, start + (++ticks * absInterval) - now()); - await new Promise(resolve => setTimeout(resolve, delay)); - current = current.add({ milliseconds: interval }); // increment (or decrement) - } - })(); - return Object.assign(generator, { - [Symbol.asyncDispose]: async () => { await generator.return(void 0); } - }); - }; -}; -//# sourceMappingURL=plugin.ticker.js.map \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js.map b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js.map deleted file mode 100644 index 038eb456..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/plugins/plugin.ticker.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"plugin.ticker.js","sourceRoot":"","sources":["plugin.ticker.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.d.ts deleted file mode 100644 index 19c45213..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.d.ts +++ /dev/null @@ -1,157 +0,0 @@ -import type { Tempo } from '#tempo/tempo.class.js'; -/** common RegExp patterns */ -export declare const Match: { - /** match all {} pairs, if they start with a word char */ readonly braces: RegExp; - /** named capture-group, if it starts with a letter */ readonly captures: RegExp; - /** event */ readonly event: RegExp; - /** period */ readonly period: RegExp; - /** two digit year */ readonly twoDigit: RegExp; - /** date */ readonly date: RegExp; - /** time */ readonly time: RegExp; - /** hour-minute-second with no separator */ readonly hhmiss: RegExp; - /** separator characters (/ - . ,) */ readonly separator: RegExp; - /** modifier characters (+-<>=) */ readonly modifier: RegExp; - /** offset post keywords (ago|hence) */ readonly affix: RegExp; - /** strip out these characters from a string */ readonly strips: RegExp; - /** whitespace characters */ readonly spaces: RegExp; - /** Z character */ readonly zed: RegExp; -}; -/** Tempo Symbol registry */ -export declare const Token: import("#library/type.library.js").Extend<{ - /** year */ readonly yy: symbol; - /** month */ readonly mm: symbol; - /** day */ readonly dd: symbol; - /** hour */ readonly hh: symbol; - /** minute */ readonly mi: symbol; - /** second */ readonly ss: symbol; - /** fraction */ readonly ff: symbol; - /** meridiem */ readonly mer: symbol; - /** short weekday name */ readonly www: symbol; - /** relative-suffix */ readonly afx: symbol; - /** time-suffix */ readonly sfx: symbol; - /** time unit */ readonly unt: symbol; - /** separator */ readonly sep: symbol; - /** modifier */ readonly mod: symbol; - /** generic number */ readonly nbr: symbol; - /** Tempo event */ readonly evt: symbol; - /** Tempo period */ readonly per: symbol; - /** time zone offset */ readonly tzd: symbol; - /** date */ readonly dt: symbol; - /** time */ readonly tm: symbol; - /** date and time */ readonly dtm: symbol; - /** day-month-year */ readonly dmy: symbol; - /** month-day-year */ readonly mdy: symbol; - /** year-month-day */ readonly ymd: symbol; - /** day of month offset */ readonly off: symbol; - /** weekDay */ readonly wkd: symbol; - /** relative offset (years, days, hours, etc) */ readonly rel: symbol; - /** timezone/calendar brackets */ readonly brk: symbol; -}, string, symbol>; -export type Token = typeof Token; -/** - * user will need to know these in order to configure their own patterns - * Tempo.Snippet is a simple regex pattern object e.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ } - * Tempo.Layout is a string-combination of Snippet names e.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?' - * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex. - * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument - */ -/** - * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy') - */ -export declare const Snippet: import("#library/type.library.js").Extend<{ - readonly [Token.yy]: RegExp; - readonly [Token.mm]: RegExp; - readonly [Token.dd]: RegExp; - readonly [Token.hh]: RegExp; - readonly [Token.mi]: RegExp; - readonly [Token.ss]: RegExp; - readonly [Token.ff]: RegExp; - readonly [Token.mer]: RegExp; - readonly [Token.sfx]: RegExp; - readonly [Token.wkd]: RegExp; - readonly [Token.tzd]: RegExp; - readonly [Token.nbr]: RegExp; - readonly [Token.afx]: RegExp; - readonly [Token.mod]: RegExp; - readonly [Token.sep]: RegExp; - readonly [Token.unt]: RegExp; - readonly [Token.brk]: RegExp; -}, symbol, RegExp>; -export type Snippet = typeof Snippet; -/** - * a {layout} is a Record of snippet-combinations describing an input DateTime argument - * the Layout's keys are in the order that they will be checked against an input value - */ -export declare const Layout: import("#library/type.library.js").Extend<{ - readonly [Token.dt]: "({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))"; - readonly [Token.tm]: "({hh}{mi}?{ss}?{ff}?{mer}?|{per})"; - readonly [Token.dtm]: "({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?"; - readonly [Token.dmy]: "({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"; - readonly [Token.mdy]: "({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"; - readonly [Token.ymd]: "({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"; - readonly [Token.wkd]: "{mod}?{wkd}{afx}?{sfx}?"; - readonly [Token.off]: "{mod}?{dd}{afx}?"; - readonly [Token.rel]: "{nbr}{sep}?{unt}{sep}?{afx}"; -}, symbol, string>; -export type Layout = typeof Layout; -/** - * an {event} is a Record of regex-pattern-like-string keys that describe Date strings. - * values can be a string or a function. - * if assigning a function, use standard 'function()' syntax to allow for 'this' binding. - * also, a function should always have a .toString() method which returns a parse-able Date string - */ -export declare const Event: import("#library/type.library.js").Extend<{ - readonly 'new.?years? ?eve': "31 Dec"; - readonly nye: "31 Dec"; - readonly 'new.?years?( ?day)?': "01 Jan"; - readonly ny: "01 Jan"; - readonly 'christmas ?eve': "24 Dec"; - readonly christmas: "25 Dec"; - readonly 'xmas ?eve': "24 Dec"; - readonly xmas: "25 Dec"; - readonly now: (this: any) => any; - readonly today: (this: any) => any; - readonly tomorrow: (this: any) => any; - readonly yesterday: (this: any) => any; -}, string, string | Function>; -export type Event = typeof Event; -/** - * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings. - * values can be a string or a function. - * if using a function, use regular 'function()' syntax to allow for 'this' binding. - */ -export declare const Period: import("#library/type.library.js").Extend<{ - readonly 'mid[ -]?night': "24:00"; - readonly morning: "8:00"; - readonly 'mid[ -]?morning': "10:00"; - readonly 'mid[ -]?day': "12:00"; - readonly noon: "12:00"; - readonly 'after[ -]?noon': "3:00pm"; - readonly evening: "18:00"; - readonly night: "20:00"; -}, string, string | Function>; -export type Period = typeof Period; -/** - * a {timeZone} alias dictionary mapping common abbreviations to IANA strings. - * Tempo will check this registry to convert abbreviations before passing them to Temporal. - */ -export declare const TimeZone: import("#library/type.library.js").Extend<{ - readonly utc: "UTC"; - readonly gmt: "Europe/London"; - readonly est: "America/New_York"; - readonly cst: "America/Chicago"; - readonly mst: "America/Denver"; - readonly pst: "America/Los_Angeles"; - readonly aest: "Australia/Sydney"; - readonly acst: "Australia/Adelaide"; - readonly awst: "Australia/Perth"; - readonly nzt: "Pacific/Auckland"; - readonly cet: "Europe/Paris"; - readonly eet: "Europe/Helsinki"; - readonly ist: "Asia/Kolkata"; - readonly npt: "Asia/Kathmandu"; - readonly jst: "Asia/Tokyo"; -}, string, string>; -export type TimeZone = typeof TimeZone; -/** Reasonable default options for initial Tempo config */ -export declare const Default: import("#library/type.library.js").SecureObject; diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js deleted file mode 100644 index 244d047d..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js +++ /dev/null @@ -1,166 +0,0 @@ -import { looseIndex } from '#library/object.library.js'; -import { secure } from '#library/utility.library.js'; -// BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW -// TEMPO functionality heavily depends on these patterns -/** common RegExp patterns */ -export const Match = { - /** match all {} pairs, if they start with a word char */ braces: /{([\w]+(?:\.[\w]+)*)}/g, - /** named capture-group, if it starts with a letter */ captures: /\(\?<([a-zA-Z][\w]*)>(.*?)(?=) */ modifier: /[\+\-\<\>][\=]?|this|next|prev|last/, - /** offset post keywords (ago|hence) */ affix: /ago|hence/, - /** strip out these characters from a string */ strips: /\(|\)/g, - /** whitespace characters */ spaces: /\s+/g, - /** Z character */ zed: /^Z$/, -}; -/** Tempo Symbol registry */ -export const Token = looseIndex()({ - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols - /** year */ yy: Symbol('yy'), - /** month */ mm: Symbol('mm'), - /** day */ dd: Symbol('dd'), - /** hour */ hh: Symbol('hh'), - /** minute */ mi: Symbol('mi'), - /** second */ ss: Symbol('ss'), - /** fraction */ ff: Symbol('ff'), - /** meridiem */ mer: Symbol('mer'), - /** short weekday name */ www: Symbol('www'), - /** relative-suffix */ afx: Symbol('afx'), - /** time-suffix */ sfx: Symbol('sfx'), - /** time unit */ unt: Symbol('unt'), - /** separator */ sep: Symbol('sep'), - /** modifier */ mod: Symbol('mod'), - /** generic number */ nbr: Symbol('nbr'), - /** Tempo event */ evt: Symbol('evt'), - /** Tempo period */ per: Symbol('per'), - /** time zone offset */ tzd: Symbol('tzd'), - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Layout Symbols - /** date */ dt: Symbol('date'), - /** time */ tm: Symbol('time'), - /** date and time */ dtm: Symbol('dateTime'), - /** day-month-year */ dmy: Symbol('dayMonthYear'), - /** month-day-year */ mdy: Symbol('monthDayYear'), - /** year-month-day */ ymd: Symbol('yearMonthDay'), - /** day of month offset */ off: Symbol('offset'), - /** weekDay */ wkd: Symbol('weekDay'), - /** relative offset (years, days, hours, etc) */ rel: Symbol('relativeOffset'), - /** timezone/calendar brackets */ brk: Symbol('brackets'), -}); -/** - * user will need to know these in order to configure their own patterns - * Tempo.Snippet is a simple regex pattern object e.g. { Symbol('yy'): /(([0-9]{2})?[0-9]{2})/ } - * Tempo.Layout is a string-combination of Snippet names e.g. '{yy}{sep}{mm}({sep}{dd})?{sfx}?' - * Tempo.Pattern is a translation of a Layout/Snippets into an anchored regex. - * The {pattern} is used to parse a string | number in the Tempo constructor {DateTime} argument - */ -/** - * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy') - */ -// Note: computed Components ('evt', 'per') are added during 'Tempo.init()' (for static) and/or 'new Tempo()' (per instance) -export const Snippet = looseIndex()({ - [Token.yy]: /(?([0-9]{2})?[0-9]{2})/, // arbitrary upper-limit of yy=9999 - [Token.mm]: /(?[0\s]?[1-9]|1[0-2]|Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)/, // month-name (abbrev or full) or month-number 01-12 - [Token.dd]: /(?
[0\s]?[1-9]|[12][0-9]|3[01])(?:\s?(?:st|nd|rd|th))?/, // day-number 01-31 - [Token.hh]: /(?2[0-4]|[01]?[0-9])/, // hour-number 00-24 - [Token.mi]: /(\:(?[0-5][0-9]))/, // minute-number 00-59 - [Token.ss]: /(\:(?[0-5][0-9]))/, // seconds-number 00-59 - [Token.ff]: /(\.(?[0-9]{1,9}))/, // fractional-seconds up-to 9-digits - [Token.mer]: /(\s*(?am|pm))/, // meridiem suffix (am,pm) - [Token.sfx]: /((?:{sep}+|T)({tm}){tzd}?)/, // time-pattern suffix 'T {tm} Z' - [Token.wkd]: /(?Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)/, // day-name (abbrev or full) - [Token.tzd]: /(?Z|(?:\+(?:(?:0[0-9]|1[0-3]):?[0-5][0-9]|14:00)|-(?:(?:0[0-9]|1[0-1]):?[0-5][0-9]|12:00)))/, // time-zone offset +14:00 to -12:00 - [Token.nbr]: /(?[0-9]*)/, // modifier count - [Token.afx]: new RegExp(`((s)? (?${Match.affix.source}))?{sep}?`), // affix optional plural 's' and (ago|hence) - [Token.mod]: new RegExp(`((?${Match.modifier.source})?{nbr} *)`), // modifier (+,-,<,<=,>,>=) plus optional offset-count - [Token.sep]: new RegExp(`(?:${Match.separator.source})`), // date-input separator character "/\\-., " (non-capture group) - [Token.unt]: /(?year|month|week|day|hour|minute|second|millisecond)(?:s)?/, // useful for '2 days ago' etc - [Token.brk]: /(\[(?[^\]]+)\](?:\[(?[^\]]+)\])?)?/, // timezone/calendar brackets [...] -}); -/** - * a {layout} is a Record of snippet-combinations describing an input DateTime argument - * the Layout's keys are in the order that they will be checked against an input value - */ -export const Layout = looseIndex()({ - [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt}))', // calendar or event - [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period - [Token.dtm]: '({dt})(?:(?:{sep}+|T)({tm}))?{tzd}?{brk}?', // calendar/event and clock/period - [Token.dmy]: '({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?', // day-month(-year) - [Token.mdy]: '({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?', // month-day(-year) - [Token.ymd]: '({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?', // year-month(-day) - [Token.wkd]: '{mod}?{wkd}{afx}?{sfx}?', // special layout (no {dt}!) used for weekday calcs (only one that requires {wkd} pattern) - [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset - [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago) -}); -/** - * an {event} is a Record of regex-pattern-like-string keys that describe Date strings. - * values can be a string or a function. - * if assigning a function, use standard 'function()' syntax to allow for 'this' binding. - * also, a function should always have a .toString() method which returns a parse-able Date string - */ -export const Event = looseIndex()({ - 'new.?years? ?eve': '31 Dec', - 'nye': '31 Dec', - 'new.?years?( ?day)?': '01 Jan', - 'ny': '01 Jan', - 'christmas ?eve': '24 Dec', - 'christmas': '25 Dec', - 'xmas ?eve': '24 Dec', - 'xmas': '25 Dec', - 'now': function () { return this.toPlainDateTime(); }, - 'today': function () { return this.toPlainDate(); }, - 'tomorrow': function () { return this.toPlainDate().add({ days: 1 }); }, - 'yesterday': function () { return this.toPlainDate().add({ days: -1 }); }, -}); -/** - * a {period} is a Record of regex-pattern-like keys that describe pre-defined Time strings. - * values can be a string or a function. - * if using a function, use regular 'function()' syntax to allow for 'this' binding. - */ -export const Period = looseIndex()({ - 'mid[ -]?night': '24:00', - 'morning': '8:00', - 'mid[ -]?morning': '10:00', - 'mid[ -]?day': '12:00', - 'noon': '12:00', - 'after[ -]?noon': '3:00pm', - 'evening': '18:00', - 'night': '20:00', -}); -/** - * a {timeZone} alias dictionary mapping common abbreviations to IANA strings. - * Tempo will check this registry to convert abbreviations before passing them to Temporal. - */ -export const TimeZone = looseIndex()({ - 'utc': 'UTC', - 'gmt': 'Europe/London', - 'est': 'America/New_York', - 'cst': 'America/Chicago', - 'mst': 'America/Denver', - 'pst': 'America/Los_Angeles', - 'aest': 'Australia/Sydney', - 'acst': 'Australia/Adelaide', - 'awst': 'Australia/Perth', - 'nzt': 'Pacific/Auckland', - 'cet': 'Europe/Paris', - 'eet': 'Europe/Helsinki', - 'ist': 'Asia/Kolkata', - 'npt': 'Asia/Kathmandu', - 'jst': 'Asia/Tokyo', -}); -/** Reasonable default options for initial Tempo config */ -export const Default = secure({ - /** log to console */ debug: false, - /** catch or throw Errors */ catch: false, - /** used to parse two-digit years*/ pivot: 75, /** @link https://en.wikipedia.org/wiki/Date_windowing */ - /** precision to measure timestamps (ms | us) */ timeStamp: 'ms', - /** calendaring system */ calendar: 'iso8601', - /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https://en.wikipedia.org/wiki/Date_format_by_country */ - /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']], -}); -//# sourceMappingURL=tempo.default.js.map \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js.map b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js.map deleted file mode 100644 index 3084b2b6..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.default.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tempo.default.js","sourceRoot":"","sources":["tempo.default.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.d.ts b/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.d.ts deleted file mode 100644 index 10d1f5f0..00000000 --- a/packages/tempo/.rollup.cache/home/michael/Project/tempo/packages/tempo/src/tempo.config/tempo.enum.d.ts +++ /dev/null @@ -1,111 +0,0 @@ -import type { KeyOf, ValueOf, LooseUnion } from '#library/type.library.js'; -/** - * Various enumerations used throughout Tempo library. - * These are exported and added as static getters of the Tempo class. - * Usage example: - ```typescript - const dayNames = Tempo.WEEKDAY.keys(); // ['All', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] - ``` - */ -/** */ -export declare const WEEKDAY: import("#library/enumerate.library.js").Enum.wrap>; -export declare const WEEKDAYS: import("#library/enumerate.library.js").Enum.wrap>; -export type WEEKDAY = KeyOf; -export type WEEKDAYS = KeyOf; -export type Weekday = ValueOf; -export declare const MONTH: import("#library/enumerate.library.js").Enum.wrap>; -export declare const MONTHS: import("#library/enumerate.library.js").Enum.wrap>; -export type MONTH = KeyOf; -export type MONTHS = KeyOf; -export type Month = ValueOf; -export declare const SEASON: import("#library/enumerate.library.js").Enum.wrap<{ - readonly Summer: "summer"; - readonly Autumn: "autumn"; - readonly Winter: "winter"; - readonly Spring: "spring"; -}>; -export declare const COMPASS: import("#library/enumerate.library.js").Enum.wrap<{ - readonly North: "north"; - readonly East: "east"; - readonly South: "south"; - readonly West: "west"; -}>; -export type SEASON = ValueOf; -export type COMPASS = ValueOf; -/** number of seconds in a time unit */ -export declare const DURATION: import("#library/enumerate.library.js").Enum.wrap<{ - /** approx number of seconds in a year */ readonly year: 31536000; - /** approx number of seconds in a month */ readonly month: 2628000; - /** number of seconds in a week */ readonly week: 604800; - /** number of seconds in a day */ readonly day: 86400; - /** number of seconds in an hour */ readonly hour: 3600; - /** number of seconds in a minute */ readonly minute: 60; - /** one second */ readonly second: 1; - /** number of seconds in a millisecond */ readonly millisecond: 0.001; - /** number of seconds in a microsecond */ readonly microsecond: 0.000001; - /** number of seconds in a nanosecond */ readonly nanosecond: 1e-9; -}>; -/** number of milliseconds in a time unit */ -export declare const DURATIONS: import("#library/enumerate.library.js").Enum.wrap<{ - /** approx number of milliseconds in a year */ readonly years: number; - /** approx number of milliseconds in a month */ readonly months: number; - /** number of milliseconds in a week */ readonly weeks: number; - /** number of milliseconds in a day */ readonly days: number; - /** number of milliseconds in an hour */ readonly hours: number; - /** number of milliseconds in a minute */ readonly minutes: number; - /** number of milliseconds in a second */ readonly seconds: number; - /** one millisecond */ readonly milliseconds: number; - /** number of milliseconds in a microsecond */ readonly microseconds: number; - /** number of milliseconds in a nanosecond */ readonly nanoseconds: number; -}>; -export type DURATION = KeyOf; -export type DURATIONS = KeyOf; -/** pre-defined Format code short-cuts */ -export declare const FORMAT: import("#library/enumerate.library.js").Enum.wrap<{ - /** useful for standard date display */ readonly display: "{www}, {dd} {mmm} {yyyy}"; - /** useful for standard datestamps */ readonly weekDate: "{www}, {yyyy}-{mmm}-{dd}"; - /** useful for standard timestamps */ readonly weekTime: "{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"; - /** useful for standard full timestamps */ readonly weekStamp: "{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"; - /** useful for readable month and day */ readonly dayMonth: "{dd}-{mmm}"; - /** useful for Date */ readonly dayDate: "{dd}-{mmm}-{yyyy}"; - /** display with Time */ readonly dayTime: "{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"; - /** useful for stamping logs */ readonly logStamp: "{yyyy}{mm}{dd}T{hhmiss}.{ff}"; - /** useful for sorting display-strings */ readonly sortTime: "{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"; - /** useful for sorting week order */ readonly yearWeek: "{wy}{ww}"; - /** useful for sorting month order */ readonly yearMonth: "{yyyy}{mm}"; - /** useful for sorting date order */ readonly yearMonthDay: "{yyyy}{mm}{dd}"; - /** just Date portion */ readonly date: "{yyyy}-{mm}-{dd}"; - /** just Time portion */ readonly time: "{hh}:{mi}:{ss}"; -}>; -export type FORMAT = ValueOf; -export type Format = LooseUnion>; -export declare const LIMIT: import("#library/type.library.js").SecureObject<{ - /** Tempo(31-Dec-9999.23:59:59).ns */ readonly maxTempo: any; - /** Tempo(01-Jan-1000.00:00:00).ns */ readonly minTempo: any; -}>; -export declare const ELEMENT: import("#library/enumerate.library.js").Enum.wrap<{ - readonly yy: "year"; - readonly mm: "month"; - readonly ww: "week"; - readonly dd: "day"; - readonly hh: "hour"; - readonly mi: "minute"; - readonly ss: "second"; - readonly ms: "millisecond"; - readonly us: "microsecond"; - readonly ns: "nanosecond"; -}>; -export type ELEMENT = ValueOf; -export type Element = KeyOf; -export declare const MUTATION: any; -export type MUTATION = ValueOf; -export type Mutation = KeyOf; -export declare const ZONED_DATE_TIME: any; -export type ZONED_DATE_TIME = ValueOf; -export type ZonedDateTime = KeyOf; -export declare const OPTION: import("#library/enumerate.library.js").Enum.wrap>; -export type OPTION = typeof OPTION; -export type Option = KeyOf